IsDate函数返回true但SQL Server 2016上的日期转换失败

时间:2017-06-23 14:20:17

标签: sql sql-server date sql-server-2016

我正在将数据库从SQL Server 2005升级到SQL Server 2016,并遇到了一个日本转换问题,让我感到难过。

首先,日期值存储在XML列中,值为“01/1/015”。

此查询将在SQL Server 2005数据库上执行,并将年份转换为2015年。但是,在SQL Server 2016中对相同数据执行此查询时,它将失败并显示以下消息:

从字符串转换日期和/或时间时转换失败。

select ISDATE(cd1.XmlData.value('(/Customer/Date/text())[1]', 'varchar(32)')) as 'IsDate',
    cd1.XmlData.value('(/Customer/Date/text())[1]', 'varchar(32)') as 'Date as varchar',
    cast(cd1.XmlData.value('(/Customer/Date/text())[1]', 'varchar(32)') as Datetime) as 'Date as datetime'
from Cases c
INNER JOIN CaseData AS cd1 WITH (NOLOCK) ON c.CaseID = cd1.CaseID AND cd1.TabID = 'CUST' 
where c.CaseID = '123456'

我已将数据库设置和服务器设置与两台服务器进行了比较,但未找到任何看起来相关的内容。

似乎奇怪的是,在SQL Server 2016中,IsDate函数返回true但转换失败。我也尝试使用此行转换为日期,但它也失败了:cd1.XmlData.value('(/ CustomerInfo / ciEffectiveDate / text())[1]','datetime')。

是否还有其他人遇到此问题或知道如何处理我认为无效的日期?

0 个答案:

没有答案