You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server将带+00后缀的varchar日期转换为datetime失败如何解决

解决方案

报错的核心原因是常规datetime类型不支持识别带时区偏移后缀的字符串格式,你输入的字符串末尾+00属于UTC时区标识,不在datetime的兼容解析范围内。可以按需求选择以下方案解决:

方案1:截掉时区后缀后转换(适合所有SQL Server版本,时区固定为+00的场景)

直接截取前19位的纯日期时间部分再做转换即可:

-- 固定字符串转换
SELECT CAST(LEFT('2021-05-30 19:00:00+00', 19) AS datetime)

-- 字段转换写法
SELECT CAST(LEFT(你的存储日期的varchar字段名, 19) AS datetime) FROM 表名

方案2:通过datetimeoffset中转转换(适合SQL Server 2008及以上版本,时区不固定的通用场景)

datetimeoffset是SQL Server专门用来存储带时区偏移的日期时间类型,可以完美识别你的输入格式,再按需转成普通datetime即可:

转成UTC时间的datetime

SELECT CAST(CAST('2021-05-30 19:00:00+00' AS datetimeoffset) AS datetime)

转成指定时区的datetime

如果需要转成东八区(北京时间)的对应时间,可以配合SWITCHOFFSET函数使用:

SELECT CAST(SWITCHOFFSET(CAST('2021-05-30 19:00:00+00' AS datetimeoffset), '+08:00') AS datetime)

方案3:用CONVERT指定样式码转换

也可以指定ISO8601对应的样式码127做转换,兼容性更好:

SELECT CONVERT(datetime, CONVERT(datetimeoffset, '2021-05-30 19:00:00+00', 127))

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:18:02