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

Sql server SQL Server:特定日期时区中特定时间的日期范围,sql-server,timezone,where-in,Sql Server,Timezone,Where In,我在SQL Server中使用以下WHERE条件来确定特定时区(此处为科威特)上一周从周五(午夜)到周六(午夜)的日期范围 如果我必须选择科威特时间周五午夜至周六上午5:00的MYDATE,我应该如何继续将额外的小时/分钟添加到上述时间中?假设MYDATE是日期时间偏移量: 使用datetimeoffset时,可以在日期中包含时区,SQL Server将处理该时区。例如,下面的CASE表达式返回@SomeDate的值: DECLARE @SomeDate datetimeoffset = '20

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


如果我必须选择科威特时间周五午夜至周六上午5:00的
MYDATE
,我应该如何继续将额外的小时/分钟添加到上述时间中?

假设
MYDATE
日期时间偏移量

使用
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;
注意,
DATEADD
with
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')
其中MYDATE>=SWITCHOFFSET(DATEADD(第5天,DATEADD(星期,DATEDIFF(第6周,SYSDATETIMEOFFSET()),0)),“+00:00”)
和MYDATE
假设
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;
注意,
DATEADD
with
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')
其中MYDATE>=SWITCHOFFSET(DATEADD(第5天,DATEADD(星期,DATEDIFF(第6周,SYSDATETIMEOFFSET()),0)),“+00:00”)
和MYDATE