开发者社区> 问答> 正文

SQL Server:日期范围在特定日期的时区中的特定时间

我WHERE在SQL Server中使用以下条件来确定特定时区(此处为科威特)从上周的星期五(午夜)到星期六(午夜)的日期范围。

WHERE 
    MYDATE BETWEEN (DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 4) AT TIME ZONE  'Arab Standard Time') 
               AND (DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 5) AT TIME ZONE  'Arab Standard Time')

如果我必须选择MYDATE从星期五的午夜到科威特时间的凌晨5:00,从星期六开始,我该如何继续在上面增加额外的小时/分钟?

sql-server 时区 在哪里

展开
收起
祖安文状元 2020-01-04 15:07:44 578 0
1 条回答
写回答
取消 提交回答
  • 假定该MYDATE被一个datetimeoffset:

    使用a时,datetimeoffset您可以在日期中包括时区,SQL Server会处理它。例如,以下CASE表达式返回的值@SomeDate:

    DECLARE @SomeDate datetimeoffset = '2019-12-28T20:30:31+00:00';
    
    
    SELECT CASE WHEN @SomeDate >= '2019-12-28T21:00:00+01:00' AND @SomeDate < '2019-12-28T22:00:00+01:00' THEN @SomeDate END;
    
    

    假设您正在运行的查询来自“阿拉伯标准时间”中的某个位置,那么您最好使用SYSDATETIMEOFFSET而不是GETDATE()为此,因为它datetimeoffset也会返回:

    WHERE MYDATE >= DATEADD(DAY,5,DATEADD(WEEK, DATEDIFF(WEEK, 6, SYSDATETIMEOFFSET()), 0))
          AND MYDATE < DATEADD(HOUR,5,DATEADD(DAY,6,DATEADD(WEEK, DATEDIFF(WEEK, 6, SYSDATETIMEOFFSET()), 0)))
    
    

    请注意,DATEADDwith WEEK取决于语言,并且我不知道您的设置是什么,因此这可能无法为您提供所需的值,但将位于正确的位置。

    如果MYDATE是UTC时间(在多个时区中处理数据的另一种常见方式),而不是a datetimeoffset,那么您可以SWITCHOFFSET在创建数据后更改时间:

    WHERE MYDATE >= SWITCHOFFSET(DATEADD(DAY,5,DATEADD(WEEK, DATEDIFF(WEEK, 6, SYSDATETIMEOFFSET()), 0)),'+00:00')
          AND MYDATE < SWITCHOFFSET(DATEADD(HOUR,5,DATEADD(DAY,6,DATEADD(WEEK, DATEDIFF(WEEK, 6, SYSDATETIMEOFFSET()), 0))),'+00:00')
    
    2020-01-06 10:36:29
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载