如何修改插入的数据
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 约束在插入 和 执行触发器 之前被检查 。
我正在尝试解决数据摄取问题。
有一个应用程序收集一些数据并将其输入我们的数据库,但问题是它收集的日期已在客户端被修改为 '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 约束在插入 和 执行触发器 之前被检查 。