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

SQL Server中如何将'01-Jan-2022 05:17:13 PM CST'转为datetime?Convert函数失效

解决SQL Server中带时区缩写的字符串转datetime问题

针对格式为'01-Jan-2022 05:17:13 PM CST'的字符串,直接用CONVERT函数无法转换的核心原因是字符串包含时区缩写CST,而CONVERT支持的内置格式不兼容这类带时区标识的模式。以下是几种可行的解决方法:

方法1:移除时区缩写后转换

先通过字符串替换去掉CST部分,再使用CAST或CONVERT结合匹配的格式样式完成转换:

-- 方式1:用CAST移除时区后直接转换
SELECT CAST(REPLACE('01-Jan-2022 05:17:13 PM CST', ' CST', '') AS DATETIME)

-- 方式2:用CONVERT指定格式样式(109对应「mon dd yyyy hh:mi:ss:mmmAM/PM」格式)
SELECT CONVERT(DATETIME, REPLACE('01-Jan-2022 05:17:13 PM CST', ' CST', ''), 109)

方法2:使用PARSE函数解析带时区的字符串

PARSE函数支持解析包含时区缩写的字符串(依赖CLR环境,大部分SQL Server实例默认开启),可先解析为DATETIMEOFFSET类型,再转换为DATETIME:

SELECT CONVERT(DATETIME, PARSE('01-Jan-2022 05:17:13 PM CST' AS DATETIMEOFFSET USING 'en-US'))

方法3:用TRY系列函数避免转换失败报错

如果存在格式不规范的字符串,建议使用TRY_CAST、TRY_CONVERT或TRY_PARSE,转换失败时会返回NULL而非抛出错误:

-- 使用TRY_CONVERT
SELECT TRY_CONVERT(DATETIME, REPLACE('01-Jan-2022 05:17:13 PM CST', ' CST', ''), 109)

-- 使用TRY_PARSE
SELECT TRY_CONVERT(DATETIME, TRY_PARSE('01-Jan-2022 05:17:13 PM CST' AS DATETIMEOFFSET USING 'en-US'))

注意:若需要保留时区信息,建议直接转换为DATETIMEOFFSET类型,DATETIME本身不存储时区数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:05:26