我有一个查询,我需要检查一个日期是否小于或等于另一个日期。日期以这种格式2/1/2020
的形式存储在表中作为字符串。我的测试服务器上的SQL Server版本为13.0,下面的查询可以正常使用,但暂存和正式版本均为11.0.7。下面的查询是我到目前为止尝试过的但出现错误
“从字符串转换日期和/或时间时转换失败。”
编写此查询以使其在所有SQL服务器上都能正常工作的正确方法是什么?
SELECT TrackingNumber
FROM CarrierTrackingData
WHERE (SUBSTRING(Status, 1, 9) = 'Delivered') AND (CONVERT(date, CAST(DeliveryDate AS date), 23) <= CONVERT(date, CAST(InStoreDate AS date), 23))
GROUP BY TrackingNumber```
您需要101
世纪mm/dd/yyyy
转换为日期格式:
WHERE ( SUBSTRING(Status, 1, 9) = 'Delivered' AND
CONVERT(date, DeliveryDate , 101) <= CONVERT(date, InStoreDate , 101)
);
注意:您不需要使用CAST()
,因为带有世纪的CONVERT()
会为您进行对话。
EDIT:您可以使用TRY_CONVERT()
:
SELECT DeliveryDate,
TRY_CONVERT(DATE, DeliveryDate, 101) AS Possible_DeliveryDate,
InStoreDate,
TRY_CONVERT(DATE, InStoreDate , 101) AS Possible_InStoreDate
FROM table t;
TRY_CONVERT()
将在对话失败的地方返回NULL
。