2017-09-27 87 views
1

我正试图解决数据摄取问题。如何修改插入的数据

有收集一些数据,它吐出到我们的数据库的应用程序,但问题是它正在收集已被修改在客户端要像“DDD DDMMMYYYY”日期:

'Sat 20May2017' 

该应用程序不是我们的,我们无法访问它的源代码。我想简单地从插入之前的日期中删除“DDD”部分,但是我一直无法成功完成此操作。

SOURCE_DATE DATE NOT NULL 

AS是,插入件会失败:从字符串变换日期和/或时间时

转换失败

表列被定义。

但他们将与格式 'DDMMMYYYY'工作(我已经测试了这一点)。

我试图创建触发器来解决这个问题,但没有我曾尝试工作过。最近的一次尝试:

CREATE TRIGGER T_FORMAT_DATE 
ON MY_TABLE 
INSTEAD OF INSERT AS 
BEGIN 
    SET NOCOUNT ON; 

    INSERT INTO MY_TABLE(SOURCE_DATE) 
    SELECT RIGHT(SOURCE_DATE, LEN(SOURCE_DATE) - 4) 
    FROM inserted; 
END 

边问题:有没有办法知道何时/如果触发器已执行?

任何帮助将不胜感激。

回答

0

我做不觉得这是最好的答案,但这里是一个方式

我创建了一个 “穿针引线” 表设置SOURCE_DATEVARCHAR(13)

然后,我触发或@Yogesh或@rahul触发器会工作得很好。问题是表约束触发的执行之前检查在插入

+0

如果下面的答案有用,则接受或投票解决方案/答案。 –

+0

我希望有人会以更好的答案作出回应。我觉得我只是一个解决方法,而不是一个真正的解决方案。 –

0

如果你想从你期望的日期字符串中删除一周的一天是星期六,星期日,星期一,等等。然后在下面简短的命令会帮助你。

DECLARE @DATE NVARCHAR(80); 

SET @DATE = 'Sat 20May2017' 

select LTRIM(REPLACE(@DATE, SUBSTRING(@DATE, 1, 3), '')) DATE 

输出:

+===========+ 
| DATE  | 
+===========+ 
| 20May2017 | 
+-----------+ 
+0

它仍然返回一个字符串,将其转换成日期 – Wocugon

+0

我已经给出了答案,因为每个“但是他们将与格式‘DDMMMYYYY’(我已经测试了这一点)的工作。” –

+0

@Sobmac没有问题,字符串日期将插入我已经过测试的表中。 –

0

如果你想删除的一周每天都是星期六,星期日,星期一,等等。你可以使用try_parsefunction

DECLARE @DATE NVARCHAR(80); 
SET @DATE = 'Sat 20May2017'; 
SELECT Replace(CONVERT(VARCHAR(11), TRY_PARSE(@DATE AS DATE), 106), ' ', '');