到日期的字符转换失败取决于 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;
找到有问题的记录后,您可以修复它们,然后再次尝试查询。
我正在尝试对我的数据设置一个简单的查询,将 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;
找到有问题的记录后,您可以修复它们,然后再次尝试查询。