我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 时区 在哪里
假定该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')
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。