我正在尝试解决数据提取问题。
有一个应用程序收集一些数据并将其吐入我们的数据库,但问题是它收集的日期在客户端被修改为类似于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
附带问题:有没有办法知道触发器何时/是否已执行?
非常感谢任何帮助。
答案 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触发器将正常工作。问题是在执行触发器之前,在和处检查表约束。