我正在将数据库从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')。
是否还有其他人遇到此问题或知道如何处理我认为无效的日期?