如何将varchar与timezone一起转换为sql中的datetime

时间:2009-05-19 01:56:40

标签: c# sql xml

我将我的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')

1 个答案:

答案 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