Sql server 2005 转换;2013-02-04T10:30:23+;00:00“;使用T-SQL更新时间(2005)

Sql server 2005 转换;2013-02-04T10:30:23+;00:00“;使用T-SQL更新时间(2005),sql-server-2005,datetime,type-conversion,Sql Server 2005,Datetime,Type Conversion,您好,我正在将UTC日期时间字符串“2013-02-04T10:30:23+00:00”转换为Sql 2005日期时间格式。 我试过了 转换(datetime,'2013-02-04T10:30:23+00:00',101)但从字符串转换datetime时出现错误“转换失败” 但是,转换(日期时间,'2013-02-04 10:30:23',101)确实有效 是否有转换(日期时间,'2013-02-04T10:30:23+00:00',101)的变通方法? 提前谢谢。您可以这样做: DECLAR

您好,我正在将UTC日期时间字符串“2013-02-04T10:30:23+00:00”转换为Sql 2005日期时间格式。 我试过了 转换(datetime,'2013-02-04T10:30:23+00:00',101)但从字符串转换datetime时出现错误“转换失败”

但是,转换(日期时间,'2013-02-04 10:30:23',101)确实有效

是否有转换(日期时间,'2013-02-04T10:30:23+00:00',101)的变通方法?


提前谢谢。

您可以这样做:

DECLARE @s VARCHAR(100) = '2013-02-04T10:30:23+00:00'
SELECT  CONVERT(DATETIME, LEFT(@s, 10) + ' ' + SUBSTRING(@s, 12, 8), 101)

这将提取字符串中所需的部分,将它们连接成一个新字符串,然后使用
CONVERT
获取
DATETIME

谢谢!但我正在寻找一种不改变字符串的解决方案,因为它将消耗更多资源,而我有数千条记录要处理。是的,如果你是u在SQL Server 2008中,您可以使用
CAST(将(DATETIMEOFFSET,@s,207)转换为DATETIME)
但在SQL Server 2005中没有
DATETIMEOFFSET
数据类型。如果存在性能问题,您可以为上述建议的定义创建一个计算列,您还必须使用
persistend
选项创建它。
DECLARE @utc nvarchar(100) = '2013-02-04T10:30:23+00.00'
SELECT CAST(STUFF(@utc, CHARINDEX('+', @utc), LEN(@utc),'') AS datetime)