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

SQL Server中结合sys.time_zone_info编写Case语句转换UTC到EST的问题排查

修复UTC转带夏令时的EST时间的SQL语句错误

原SQL语句存在两个核心问题:

  • CASE的WHEN条件中使用SELECT *返回整行数据,无法直接作为布尔判断依据
  • 子查询未明确返回单个布尔值,不符合CASE条件的语法要求

修复后的兼容原逻辑写法

SELECT
    CN.CreateDate,
    CASE 
        WHEN (SELECT TOP 1 ISNULL(TZI.is_currently_dst, 0) 
              FROM sys.time_zone_info TZI 
              WHERE TZI.name = 'US Eastern Standard Time') = 0
            THEN DATEADD(HOUR, -5, CN.CreateDate)
            ELSE DATEADD(HOUR, -4, CN.CreateDate)
    END AS CreateDateEST
FROM MC_CDCPContactNotes CN

修复说明:

  • 将子查询改为返回is_currently_dst的具体值,确保可以在WHEN中进行数值比较
  • 用TOP 1保证子查询仅返回单个结果(sys.time_zone_info中时区名称唯一)

更优的自动夏令时处理方案

如果需要对历史时间也准确适配夏令时,推荐使用SQL Server原生的AT TIME ZONE函数,无需手动判断偏移量:

SELECT
    CN.CreateDate,
    CN.CreateDate AT TIME ZONE 'UTC' AT TIME ZONE 'US Eastern Standard Time' AS CreateDateEST
FROM MC_CDCPContactNotes CN

原理说明:

  1. CN.CreateDate AT TIME ZONE 'UTC':将原始UTC时间标记为UTC时区类型
  2. 再次使用AT TIME ZONE 'US Eastern Standard Time':自动转换为东部时区时间,系统会根据时间点自动识别是否启用夏令时

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:25:29