我尝试只选择在过去12小时内发生的行。下面的查询在没有Where子句的情况下工作得很好,我得到的正是我想要的"Called_At“列。但是,当我添加where子句时,它会给出错误"Conversion failed when converting character string to smalldatetime data type."
查询为
SELECT TOP (2000)
CONVERT(smalldatetime, CONCAT([Call_Date],' ',[Call_Time])) As 'Called_At'
,[Other_Column1]
,[Other_Column2]
,[etc]
FROM [Database].[dbo].[Table]
WHERE CONVERT(smalldatetime, CONCAT([Call_Date],' ',[Call_Time])) >= DATEADD(hour,-12,GetDATE())
ORDER BY [Call_Date] DESC, [Call_Time] DESC以下是不带Where部分的语句的列示例。
Called_At Column1 Column2
------------------- ------- ---------
2020-04-05 23:09:00 Data MoreData
2020-04-05 20:50:00 Data MoreData
2020-04-05 17:08:00 Data MoreData
2020-04-05 16:49:00 Data MoreData为什么第一个CONVERT()语句可以正常工作,而第二个却不行?
发布于 2020-04-07 01:47:57
这是因为操作的顺序。我建议您使用以下命令来查找攻击性价值:
SELECT CONCAT([Call_Date], ' ', [Call_Time]))
FROM [Database].[dbo].[Table]
WHERE TRY_CONVERT(smalldatetime, CONCAT([Call_Date], ' ', [Call_Time])) IS NULL一旦你看到了数据的样子,你就可以知道如何修复它。
https://stackoverflow.com/questions/61065759
复制相似问题