如何解决使用 DateDiff 从字符串转换日期和/或时间时转换失败
我可能已经查看了所有其他问题,尝试了所有其他答案,但没有任何效果,所以我将放弃我正在尝试做的事情并希望我能得到一些帮助。
这是我目前正在做的事情。
SELECT t1.SOURCE_ID,t1.[Agency Name],t1.[Title Name],t1.DESCR,t1.CREATED_DATE AS 'Reviewed Date',t2.CREATED_DATE AS 'Filed Dated',DateDiff(Day,'Filed Date','Reviewed Date') AS 'Difference'
FROM ((SELECT h.SOURCE_ID,h.CHANGE_VALUE_FROM,h.CHANGE_VALUE_TO,h.CREATED_DATE,rp.EFFECTIVE_DATE,tv.DESCR,a.NAME as 'Agency Name',p.NAME as 'Title Name' FROM HISTORY AS h
INNER JOIN RULE_PACKET AS rp ON (h.SOURCE_ID = rp.RULE_PACKET_ID)
INNER JOIN PROGRAM AS p ON (p.PROGRAM_ID = rp.PROGRAM_ID)
INNER JOIN AGENCY AS a ON (a.AGENCY_ID = p.AGENCY_ID)
LEFT OUTER JOIN TYPE_V AS tv ON (tv.TYPE_ID = rp.ACTION_TYPE_ID)
WHERE (h.CHANGE_VALUE_TO = 'Rules Pre-Approved' OR h.CHANGE_VALUE_TO = 'CPR Rules Pre-Approved') AND (h.CREATED_DATE >= '2020-02-01 00:00:00.000')) AS t1
INNER JOIN (SELECT h.SOURCE_ID,p.NAME as 'Title Name' FROM HISTORY as h
INNER JOIN RULE_PACKET AS rp ON (h.SOURCE_ID = rp.RULE_PACKET_ID)
INNER JOIN PROGRAM AS p ON (p.PROGRAM_ID = rp.PROGRAM_ID)
INNER JOIN AGENCY AS a ON (a.AGENCY_ID = p.AGENCY_ID)
LEFT OUTER JOIN TYPE_V AS tv ON (tv.TYPE_ID = rp.ACTION_TYPE_ID)
WHERE (h.CHANGE_VALUE_TO = 'Standard Packet Filed') AND (h.CREATED_DATE >= '2020-02-01 00:00:00.000')) AS t2 ON (t1.SOURCE_ID = t2.SOURCE_ID) AND ('Reviewed Date' >= 'Filed Date'));
我得到的错误是:
消息 241,级别 16,状态 1,第 1 行 从字符串转换日期和/或时间时转换失败。
我想知道从提交到审核需要多长时间。
当我取出 DateDiff 函数时,这是我的代码。
SELECT t1.SOURCE_ID,t2.CREATED_DATE AS 'Filed Dated'
FROM ((SELECT h.SOURCE_ID,p.NAME as 'Title Name' FROM HISTORY as h
INNER JOIN RULE_PACKET AS rp ON (h.SOURCE_ID = rp.RULE_PACKET_ID)
INNER JOIN PROGRAM AS p ON (p.PROGRAM_ID = rp.PROGRAM_ID)
INNER JOIN AGENCY AS a ON (a.AGENCY_ID = p.AGENCY_ID)
LEFT OUTER JOIN TYPE_V AS tv ON (tv.TYPE_ID = rp.ACTION_TYPE_ID)
WHERE (h.CHANGE_VALUE_TO = 'Standard Packet Filed') AND (h.CREATED_DATE >= '2020-02-01 00:00:00.000')) AS t2 ON (t1.SOURCE_ID = t2.SOURCE_ID) AND ('Reviewed Date' >= 'Filed Date'));
这就是它产生的:
Screen shot of results from SSMS
请帮忙。
解决方法
您需要在 datediff() 函数和 where 子句中使用 t1.CREATED_DATE 和 t2.CREATED_DATE 而不是 'Reviewed Date' 和 'Filed Dated',因为不允许在 where 子句或选择列表中使用列别名。
当您在 datediff() 函数中使用 'Reviewed Date' 或 'Filed Dated' 时,它试图将字符串 'Reviewed Date' 和 'Filed Dated' 转换为不可能的日期字段。
请试试这个:
SELECT t1.SOURCE_ID,t1.[Agency Name],t1.[Title Name],t1.DESCR,t1.CREATED_DATE AS 'Reviewed Date',t2.CREATED_DATE AS 'Filed Dated',DateDiff(Day,t2.CREATED_DATE,t1.CREATED_DATE) AS 'Difference'
FROM ((SELECT h.SOURCE_ID,h.CHANGE_VALUE_FROM,h.CHANGE_VALUE_TO,h.CREATED_DATE,rp.EFFECTIVE_DATE,tv.DESCR,a.NAME as 'Agency Name',p.NAME as 'Title Name' FROM HISTORY AS h
INNER JOIN RULE_PACKET AS rp ON (h.SOURCE_ID = rp.RULE_PACKET_ID)
INNER JOIN PROGRAM AS p ON (p.PROGRAM_ID = rp.PROGRAM_ID)
INNER JOIN AGENCY AS a ON (a.AGENCY_ID = p.AGENCY_ID)
LEFT OUTER JOIN TYPE_V AS tv ON (tv.TYPE_ID = rp.ACTION_TYPE_ID)
WHERE (h.CHANGE_VALUE_TO = 'Rules Pre-Approved' OR h.CHANGE_VALUE_TO = 'CPR Rules Pre-Approved') AND (h.CREATED_DATE >= '2020-02-01 00:00:00.000')) AS t1
INNER JOIN (SELECT h.SOURCE_ID,p.NAME as 'Title Name' FROM HISTORY as h
INNER JOIN RULE_PACKET AS rp ON (h.SOURCE_ID = rp.RULE_PACKET_ID)
INNER JOIN PROGRAM AS p ON (p.PROGRAM_ID = rp.PROGRAM_ID)
INNER JOIN AGENCY AS a ON (a.AGENCY_ID = p.AGENCY_ID)
LEFT OUTER JOIN TYPE_V AS tv ON (tv.TYPE_ID = rp.ACTION_TYPE_ID)
WHERE (h.CHANGE_VALUE_TO = 'Standard Packet Filed') AND (h.CREATED_DATE >= '2020-02-01 00:00:00.000')) AS t2 ON (t1.SOURCE_ID = t2.SOURCE_ID) AND (t1.CREATED_DATE >= t2.CREATED_DATE));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。