从字符串转换日期 and/or 时间时转换失败,其中 varchar 字段作为日期

Conversion failed when converting date and/or time from character string with varchar field as date

我正在尝试将 MySQL 查询转换为 SQL 服务器,这是我目前所了解的。 SQL 服务器似乎对 table 将日期(在本例中为截止日期)存储为 VARCHAR 这一事实感到不满。因此,考虑到这一点,我尝试使用 CONVERT(DATE, EXPRESSION) 转换它们。不幸的是,我不断收到 "Conversion failed when converting date and/or time from character string" 错误消息。我不确定如何尝试转换。

SELECT MYSQL_locationstesting.*, MYSQL_locations.sitenumb

FROM MYSQL_locationstesting 

INNER JOIN MYSQL_locations 
ON MYSQL_locationstesting.siteid=MYSQL_locations.id 

WHERE MYSQL_locationstesting.display = 1 
AND (CONVERT(DATE, MYSQL_locationstesting.duedate) < CAST(GETDATE() AS DATE) 
AND MYSQL_locations.active = 1 
OR CONVERT(DATE, MYSQL_locationstesting.duedate) BETWEEN DATEADD(DAY, -1, CAST(GETDATE() AS DATE)) 
AND DATEADD(DAY, 5, CAST(GETDATE() AS DATE))) 

您在 MySQL table 中有一些数据不是有效的日期值。

使用 TRY_CONVERT() 并为无法转换的字符串提供您想要的任何默认值。

从 SQL Server 2012 开始,您有 TRY_PARSE/CONVERT/CAST 可以提供帮助。您看到该错误是因为无法将某些内容显式转换为日期类型。

SELECT CONVERT(DATE, 'This will break!')

SELECT * 
FROM your_table 
WHERE TRY_PARSE(your_column AS DATE) IS NULL

第二个查询将 return 所有无法转换为日期类型的值。因此,您可以将其添加到查询的底部以将它们全部过滤掉:

AND TRY_PARSE(your_column AS DATE) IS NOT NULL

这将从您的结果中删除它们,因此如果您仍想以某种方式捕获这些值,请谨慎使用。