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

Azure SQL中如何将UTC时间转换为Central Standard Time并查询作业

解决方案

修正后完整代码

BEGIN
-- 计算中部标准时间的今日日期
DECLARE @CSTToday DATE = CAST(GETUTCDATE() AT TIME ZONE 'UTC' AT TIME ZONE 'Central Standard Time' AS DATE);
-- 计算CST今日0点对应的UTC时间、CST明日0点对应的UTC时间
DECLARE @CSTDayStart DATETIME = CAST(@CSTToday AT TIME ZONE 'Central Standard Time' AT TIME ZONE 'UTC' AS DATETIME);
DECLARE @CSTDayEnd DATETIME = CAST(DATEADD(DAY, 1, @CSTToday) AT TIME ZONE 'Central Standard Time' AT TIME ZONE 'UTC' AS DATETIME);

SELECT 
    dbo.Projects.ProjectID, 
    dbo.Projects.ProjectName, 
    dbo.Jobs.JobID, 
    dbo.Jobs.Status, 
    -- 如需返回给前端CST时区的StartDate,取消下方注释替换原StartDate字段即可
    -- dbo.Jobs.StartDate AT TIME ZONE 'UTC' AT TIME ZONE 'Central Standard Time' AS StartDateCST,
    dbo.Jobs.StartDate, 
    dbo.Jobs.EndDate, 
    dbo.Jobs.CompletedDate, 
    dbo.JobType.JobTypeID, 
    dbo.JobType.JobTypeDescription
FROM dbo.Jobs 
INNER JOIN dbo.Projects ON dbo.Jobs.ProjectID = dbo.Projects.ProjectID
INNER JOIN dbo.JobType ON dbo.Jobs.JobTypeID = dbo.JobType.JobTypeID
-- 范围查询匹配CST当日所有作业,可利用StartDate字段索引提升性能
WHERE StartDate >= @CSTDayStart
  AND StartDate < @CSTDayEnd
ORDER BY JobID DESC
END

关键逻辑说明

  • 变量计算逻辑:先获取Azure SQL服务器当前UTC时间,标记为UTC时区后转换为中部标准时间,再取日期部分,保证拿到的是用户所在时区的「今日」日期,不会受服务器UTC时区影响。
  • 筛选逻辑优化:放弃原字符串转换的写法,改用时间范围查询,既能避免索引失效提升性能,也能准确匹配CST当日0点到次日0点对应的UTC时间区间的所有作业。
  • 前端传入StartDate的处理方式:如果前端传入的是用户选择的CST日期参数@InputStartDate(date类型),直接替换代码中CAST(GETUTCDATE() AT TIME ZONE 'UTC' AT TIME ZONE 'Central Standard Time' AS DATE)部分为@InputStartDate即可,转换逻辑会自动适配对应日期的UTC区间。
  • 时区适配规则:直接使用时区名称Central Standard Time而非固定偏移量,会自动处理夏令时切换,不需要手动调整-5/-6的偏移值,避免夏令时期间筛选出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:27:01