我正在尝试对将char YYYYMMDD转换为日期类型的数据进行简单查询。我正在使用简单的convert(date,MyDateColumn)。
Select isdate(MyDateColumn),
convert(date,MyDateColumn)
FROM MyTable
WHERE MyTimeColumn = '000000'
Result: Conversion failed when converting date and/or time from character string.
Select isdate(MyDateColumn),
MyDateColumn
FROM MyTable
WHERE MyTimeColumn = '000000'
Result: 1 20190821
Select isdate(MyDateColumn),
convert(date,MyDateColumn)
FROM MyTable
WHERE MyDateColumn = '20190821' AND MyTimeColumn = '000000'
Result: 1 2019-08-21
我发现对于上面的特定行,此查询对我来说失败了,具体取决于是否向MyDateColumn添加了where子句。我添加了where子句MyDateColumn = MyDateColumn作为解决方法。有更好的解决方案的想法吗?
我正在使用SQL Server 2016(13.0.5201.2)。 MyDateColumn是char(10)类型
答案 0 :(得分:0)
这里最好的解决方案是停止将日期作为文本存储在文本列中,而开始使用实际的日期列。您第一个查询的转换失败令人震惊,并且似乎表明您没有存储日期,或者可能存在一些尾随/前导空格。由于您使用的是SQL Server 2016,因此您可以尝试以下查询来清除所有不符合要求的日期字符串:
SELECT MyDateColumn
FROM MyTable
WHERE TRY_CONVERT(datetime, MyDateColumn) IS NULL;
找到问题记录后,可以对其进行修复,然后再次尝试查询。