根据where子句

时间:2019-08-30 09:54:30

标签: sql-server date date-conversion

我正在尝试对将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)类型

1 个答案:

答案 0 :(得分:0)

这里最好的解决方案是停止将日期作为文本存储在文本列中,而开始使用实际的日期列。您第一个查询的转换失败令人震惊,并且似乎表明您没有存储日期,或者可能存在一些尾随/前导空格。由于您使用的是SQL Server 2016,因此您可以尝试以下查询来清除所有不符合要求的日期字符串:

SELECT MyDateColumn
FROM MyTable
WHERE TRY_CONVERT(datetime, MyDateColumn) IS NULL;

找到问题记录后,可以对其进行修复,然后再次尝试查询。

相关问题