如何修改插入的数据

时间:2017-09-27 04:39:45

标签: sql sql-server triggers database-trigger

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

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

'Sat 20May2017'

该应用程序不是我们的,我们无法访问其源代码。我想简单地放弃DDD'部分从插入之前的日期开始,但我无法成功完成此任务。

表格列定义为:

SOURCE_DATE DATE NOT NULL

原样,插入失败:

  

从字符串转换日期和/或时间时转换失败。

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

附带问题:有没有办法知道触发器何时/是否已执行?

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

如果你想从你想要的日期字符串中删除像sat,sun,mon等的工作日..那么下面的短命令将帮助你。

DECLARE @DATE NVARCHAR(80);

SET @DATE = 'Sat 20May2017'

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

输出:

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

答案 1 :(得分:0)

如果你想删除sat,sun,mon等周日,你可以使用 try_parse function

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

答案 2 :(得分:0)

我觉得这不是最佳答案,但这里是 a 方式:

我创建了一个“中间”表格,将 SOURCE_DATE 字段设置为 VARCHAR(13)

然后,我的触发器或@Yogesh或@rahul触发器将正常工作。问题是在执行触发器之前,在和处检查表约束。