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

SQL Server中如何将EST等本地时区列转换为考虑夏令时的UTC时区

SQL本地时区(含夏令时)转UTC实现方案

正确转换写法

如果你的dateTimeField字段存储的是指定时区的本地时间,可直接通过两次AT TIME ZONE调用完成转换,无需复杂的偏移计算,自动适配夏令时规则:

EST转UTC示例

-- 查询转换结果
SELECT dateTimeField AT TIME ZONE 'Eastern Standard Time' AT TIME ZONE 'UTC' AS utc_datetime

持久化到新列的实现

如果需要把转换结果存入新字段,参考以下语句:

-- 新增UTC时间存储列,可根据业务需要调整字段类型为DATETIME/DATETIME2
ALTER TABLE 你的表名 ADD utc_datetime DATETIME2 NULL;

-- 批量转换EST时间为UTC并写入新列
UPDATE 你的表名
SET utc_datetime = dateTimeField AT TIME ZONE 'Eastern Standard Time' AT TIME ZONE 'UTC';

其他时区适配

如果需要转换PST、CST等其他时区的时间,替换第一次AT TIME ZONE后的时区名即可:

  • PST(太平洋标准时间):'Pacific Standard Time'
  • CST(中部标准时间):'Central Standard Time'

逻辑说明

两次AT TIME ZONE的作用分别是:

  1. 第一次调用AT TIME ZONE '源时区名':给无时区标记的原始时间字段,绑定对应源时区的偏移信息,会自动根据时间值匹配夏令时/冬令时的实际偏移量
  2. 第二次调用AT TIME ZONE 'UTC':将已经绑定源时区偏移的时间,转换为UTC时区的时间

原有语句问题

你提供的原有语句逻辑是反向的,作用是把UTC时间转换为EST时间,和你需要的EST转UTC需求刚好相反:

SELECT CONVERT(datetime, SWITCHOFFSET(dateTimeField, DATEPART(TZOFFSET, dateTimeField AT TIME ZONE 'Eastern Standard Time')))

注意事项

  • 以上时区命名为Windows环境下SQL Server的标准时区名,如果你使用Linux环境部署的SQL Server,需要替换为IANA时区名:EST对应'America/New_York'、PST对应'America/Los_Angeles'、CST对应'America/Chicago'
  • 转换全程自动适配夏令时规则,无需手动处理夏令时时间段的偏移调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:09:01