到日期的字符转换失败取决于 where 子句

Char conversion to date fails depending on where clause

我正在尝试对我的数据设置一个简单的查询,将 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

我发现对于上面的特定行,此查询对我来说失败了,这取决于我是否将 where 子句添加到 MyDateColumn。我添加了 where 子句 MyDateColumn=MyDateColumn 作为解决方法。有更好的解决方案吗?

我正在使用 SQL Server 2016 (13.0.5201.2)。 MyDateColumn 是 char(10) 类型

此处最好的解决方案是停止将日期存储为文本列中的文本,而是开始使用实际的日期列。您的第一个查询中的转换失败令人担忧,并且似乎表明您存储了非日期,或者可能有一些 trailing/leading 空格。由于您使用的是 SQL Server 2016,您可以尝试以下查询来清除任何不符合要求的日期字符串:

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

找到有问题的记录后,您可以修复它们,然后再次尝试查询。