Synapse中字符串格式UTC时间戳转支持夏令时的EST时间实现方法
解决方案
Synapse Data Warehouse 内置支持带夏令时自动适配的时区转换功能,无需手动计算时差,按以下步骤操作即可:
步骤1:核心转换逻辑
使用AT TIME ZONE函数即可自动处理EST夏令时(DST)适配,该函数会自动调用系统内置的美国东部时区规则,无需手动维护夏令时起止时间:
- 首先将字符串类型的UTC时间戳转换为datetime2类型
- 声明该时间为UTC时区,再转换为美国东部标准时间(
Eastern Standard Time) - 最终转换为datetime2类型存入目标字段
完整转换表达式如下:
CAST( TRY_CAST(last_update_utc AS datetime2) AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time' AS datetime2) AS last_update_est
步骤2:正式更新表结构和数据
- 新增
last_update_est字段:
ALTER TABLE hub.test ADD last_update_est datetime2 NULL;
- 批量更新字段值:
UPDATE hub.test SET last_update_est = CAST( TRY_CAST(last_update_utc AS datetime2) AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time' AS datetime2);
效果验证
用你提供的示例数据测试,输出结果完全匹配需求:
| id | last_update_utc (string) | 转换后last_update_est |
|---|---|---|
| 1 | 2020-02-28T17:26:47.483698Z | 2020-02-28 12:26:47.4836980 |
| 2 | 2021-09-03T22:59:19.093Z | 2021-09-03 18:59:19.0930000 |
注意事项
- 若存在格式不合法的
last_update_utc字符串,TRY_CAST会返回NULL,不会触发整个更新语句报错 - 时区名称
Eastern Standard Time是Synapse内置的标准时区标识,已包含夏令时自动切换规则,无需额外调整
内容的提问来源于stack exchange,提问作者Ken Masters
相关产品推荐
相关产品推荐

