试试这个:
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中的日期时间格式在“秒”值中的精度高于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