如何在sql中将带时区的varchar转换为日期时间
Posted
技术标签:
【中文标题】如何在sql中将带时区的varchar转换为日期时间【英文标题】:How to convert varchar with timezone to datetime in sql 【发布时间】:2010-10-27 05:02:33 【问题描述】:我将我的 c# 对象序列化为 xml,然后得到 varchar,例如 '2009-05-09T13:50:59.6361485+08:00'。
但 SQL Server 返回以下消息:'Result: Msg 241: Conversion failed when conversion of date and/or time -- from string.'
在我执行以下 sql 后: 声明@msg xml
设置@msg='
选择@msg.value(N'(//root/date/text())[1]','datetime')
【问题讨论】:
【参考方案1】:试试这个:
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
【讨论】:
谢谢!我的代码是: declare @msg xml set @msg='以上是关于如何在sql中将带时区的varchar转换为日期时间的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL 中将 varchar 字段 (YYYYMM) 转换为日期 (MM/01/YY)?
如何在 SQL Server 中将 varchar 数据转换为时间