如何修改插入的数据

How to Modify Data as Inserted

我正在尝试解决数据摄取问题。

有一个应用程序收集一些数据并将其输入我们的数据库,但问题是它收集的日期已在客户端被修改为 'DDD DDMMMYYYY':

'Sat 20May2017'

该应用程序不是我们的,我们无权访问其源代码。我只想从插入日期之前的日期删除 'DDD' 部分,但我无法成功完成此操作。

table列定义为:

SOURCE_DATE DATE NOT NULL

照原样,插入失败:

Conversion failed when converting date and/or time from character string.

但是他们使用格式'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

附带问题:有没有办法知道 when/if 触发器已执行?

如有任何帮助,我们将不胜感激。

如果您想从所需的日期字符串中删除周六、周日、周一等星期几,那么下面的简短命令将对您有所帮助。

DECLARE @DATE NVARCHAR(80);

SET @DATE = 'Sat 20May2017'

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

输出:

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

如果你想删除周六、周日、周一等星期几。你可以使用try_parse function

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

我觉得这不是最好的答案,但这是a方式:

我创建了一个 "go-between" table 将 SOURCE_DATE 字段设置为 VARCHAR(13).

那么,我的触发器或@Yogesh 或@rahul 触发器就可以正常工作了。问题是 table 约束在插入 和 执行触发器 之前被检查