我将我的c#对象序列化为xml,然后得到varchar,例如'2009-05-09T13:50:59.6361485 + 08:00'。
但SQL Server返回以下messgae:'结果:消息241:转换日期和/或时间时转换失败 - 来自字符串。'
执行以下sql之后: 声明@msg xml
设置@msg ='< root>< date> 2009-05-09T13:50:59.6361485 + 08:00< / date>< / root>'
选择@ msg.value(N'(// root / date / text())[1]','datetime')
答案 0 :(得分:2)
试试这个:
declare @msg xml
set @msg='<root><date>2009-05-09T13:50:59.6361485+08:00</date></root>'
select @msg.value(N'(xs:dateTime((//root/date/text())[1]))', 'datetime')
问题是,XML中的日期时间格式在'seconds'值中比value()函数(及其对CAST或CONVERT的底层调用)可以处理的精度更高。见http://msdn.microsoft.com/en-us/library/ms187928(SQL.90).aspx。转换类型126和127需要.mmm(精度为3位),而在原始值中则为7。
有关调试步骤,请考虑以下事项:
select @msg.value(N'(//root/date/text())[1]', 'varchar(100)')
> 2009-05-09T13:50:59.6361485+08:00
select @msg.value(N'(xs:dateTime((//root/date/text())[1]))', 'varchar(100)')
> 2009-05-09T05:50:59.636Z