如何将SQL字符串日期转换为可用的ISO8601日期?

问题描述 投票:1回答:1

我有一个查询,我需要检查一个日期是否小于或等于另一个日期。日期以这种格式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```
sql sql-server tsql
1个回答
0
投票

您需要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

© www.soinside.com 2019 - 2024. All rights reserved.