如何在MSSQL中将CST时间转换为UTC时间
可以实现,按以下步骤操作即可:
注意:CST是多个时区的共用缩写(中国标准时间、美国中部时间、古巴标准时间等),以下默认你提到的CST为中国标准时间(UTC+8),如果是其他时区对应调整时差或时区名即可。另外你给出的示例输入输出时间数值完全一致,若仅需要格式转换不需要时区差计算,跳过时差处理步骤即可。
通用版本(兼容所有SQL Server版本)
第一步:先剔除字符串中的CST标识,转换为SQL Server可识别的datetime类型
示例代码:SELECT CONVERT(DATETIME, STUFF('Thu May 13 11:14:19 CST 2021', CHARINDEX('CST', 'Thu May 13 11:14:19 CST 2021'), 3, ''), 100) AS cst_datetime第二步:减去对应时差转换为UTC时间,同时格式化输出为你需要的
2021-05-13 11:14:19.000格式
示例代码:SELECT CONVERT(VARCHAR, DATEADD(HOUR, -8, CONVERT(DATETIME, STUFF('Thu May 13 11:14:19 CST 2021', CHARINDEX('CST', 'Thu May 13 11:14:19 CST 2021'), 3, ''), 100)), 121) AS utc_datetime
SQL Server 2016及以上版本(推荐,自动处理夏令时)
可以使用内置的AT TIME ZONE语法,不需要硬编码时差,适配时区的夏令时规则:
SELECT CONVERT(DATETIME, STUFF('Thu May 13 11:14:19 CST 2021', CHARINDEX('CST', 'Thu May 13 11:14:19 CST 2021'), 3, ''), 100) AT TIME ZONE 'China Standard Time' -- 这里替换为你实际的CST对应时区名 AT TIME ZONE 'UTC' AS utc_datetime
如果你的CST指代美国中部时间,将上方时区名替换为Central Standard Time即可。
内容的提问来源于stack exchange,提问作者Derek

