从以varchar字段为日期的字符串转换日期和/或时间时转换失败

时间:2019-06-24 18:53:22

标签: sql-server date-conversion

我正在尝试将MySQL查询转换为SQL Server,据我所知。对于表将DATE(在这种情况下为duate)存储为VARCHAR的事实,SQL Server似乎不满意。因此,考虑到这一点,我尝试使用CONVERT(DATE,EXPRESSION)转换它们。不幸的是,我一直收到“从字符串转换日期和/或时间时转换失败”错误消息。我不确定如何进行转换。

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))) 

2 个答案:

答案 0 :(得分:1)

从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

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

AND TRY_PARSE(your_column AS DATE) IS NOT NULL

这会将它们从结果中删除,因此,如果您仍要以某种方式捕获这些值,请格外小心。

答案 1 :(得分:0)

MySQL表中有一些不是有效日期值的数据。

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