Я сериализую свой объект С# в xml, затем получил varchar, такой как '2009-05-09T13: 50: 59.6361485 + 08: 00'.
Но SQL Server возвращает следующий messgae: "Результат: Msg 241: Ошибка конверсии при преобразовании даты и/или времени - из символьной строки."
после выполнения следующего sql: объявить @msg xml
set @msg = '<root> <date> 2009-05-09T13: 50: 59.6361485 + 08: 00 </date </root> '
выберите @msg.value(N '(//root/date/text()) [1]', 'datetime')
Попробуйте следующее:
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')
Проблема заключается в том, что формат 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