我在SQL Server中使用以下WHERE
条件来确定在特定时区(此处为科威特)中从上周的星期五(午夜)到星期六(午夜)的日期范围
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')
如果我必须从星期五的午夜到科威特时间5:00的星期六选择MYDATE
,我该如何在上面增加额外的小时/分钟?
答案 0 :(得分:2)
假设:MYDATE
是datetimeoffset
:
使用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)))
请注意,DATEADD
与WEEK
取决于语言,并且我不知道您的设置是什么,因此这可能不会给您想要的值,但是会在右边的棒球场。
如果MYDATE
是UTC时间(在多个时区中的另一种常见数据处理方式),而不是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')