我正在尝试将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)))
答案 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()并为无法转换的字符串提供所需的任何默认值。