如何解决根据SQL Server中的科威特时区筛选日期
我有以下查询,旨在计算从上一个(上一个)星期六的00:00:00到一天结束(星期日00:00:00)的用户存款
我的日期列(简称为“ datetime”)不包含任何时区详细信息(例如:2020-09-11 21:52:37.803)。不过,它是基于我的服务器所在的拉脱维亚/里加时区的。
当基于星期六00:00:00和星期日00:00:00之间的日期时间过滤我的行时,我没有考虑到我不需要根据拉脱维亚时间(服务器时间)过滤此日期这一事实,但是在另一个时间,即我的客户所在的“阿拉伯标准时间”区域。
今天,我的SQL日期列时区和阿拉伯时区相等(UTC +3),但是在冬天,该时区之间的时间会有所不同。
我该如何应对这两个时区之间的潜在时差,并确保尽管基于拉脱维亚时间,但我始终根据科威特时间00:00:00和星期日00:00:00进行过滤?我应该使用AT TIME_ZONE
还是将日期时间偏移以反映阿拉伯时区的小时?
SELECT
UserID,SUM (DEPOSIT) AS deposits
FROM
(
SELECT
UserID,datetime,CASE WHEN TranType = 'DEPOSIT' THEN AmountReal ELSE 0 END AS DEPOSIT
FROM
DataFeed
WHERE
datetime >= CAST (
CAST (
IIF (
0 = DATEPART(
dw,GETDATE()
),GETDATE(),DATEADD(
d,(
(
(
7 + 0 - DATEPART(
dw,GETDATE()
)
) % 7
) -7
),GETDATE()
)
) AS DATE
) AS datetime
) --last saturday at 00:00 0=saturday
AND datetime <= CAST (
CAST (
IIF (
1 = DATEPART(
dw,(
(
(
7 + 1 - DATEPART(
dw,GETDATE()
)
) AS DATE
) AS datetime
)
) alltrans
GROUP BY
UserID
解决方法
我建议您将数据存储在UTC中。这样,无论时区如何,您都不会遇到问题。
将现有时间戳转换为UTC。如您所知,时间在拉脱维亚时区,因此您可以轻松地进行转换并存储在UTC中。将来,通过将UTC时间转换为客户所居住的相应阿拉伯时区来运行所有查询。 DateTimeOffset
数据类型不支持DST。您需要在冬季进行相应处理,在转换日期时间的同时应用相应的偏移量。
您可以使用TODATETIMEOFFSET来应用来自UTC的转换。
DECLARE @todaysDateTime datetime2;
SET @todaysDateTime = GETUTCDATE()
SELECT TODATETIMEOFFSET (@todaysDateTime,'+03:00');
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。