SQL Server DateTimeOffset匹配相同的"日"

Deb*_*ahK 7 sql t-sql datetimeoffset

我的应用程序需要收集全球所有地点的"星期二"购买,其中"Tueday"是该地点的星期二(不论时区).如果用户需要在下周重新运行报告,我还需要获得"上周二"的数据.我们所有的数据都使用DateTimeOffset存储.

所以9/4/12 00:00:00 -7到9/4/12 23:59:59 -7必须在9月4日12:00 00:00:00 +11到9/4/12 23:59:当我执行WHERE子句时59 +11.

我无法在WHERE子句中转换为UTC,因为这将获取伦敦"星期二"的数据(取决于DST),而不是位置的星期二.

我尝试从DateTimeOffset转换为DateTime,但似乎转换为UTC.(在我的测试中,通过9/1/12至9/30/12获取了8/31/12数据.)

用TSQL做这样的事情有诀窍吗?

谢谢!

Cle*_*gic 2

恕我直言

日期时间偏移 = 日期时间+偏移(来自 UTC)

因此,您的数据已经代表客户的本地日期和时间。只需将其转换为 DateTime,您将获得客户端的本地日期和时间。

但如果您想将偏移量添加到日期时间并想要得到结果日期时间,那么

DECLARE @PurchaseDate DATETIMEOFFSET(7) = CAST('2007-05-08 12:30:29.1234567 +5:00' AS  datetimeoffset(7)) 

SELECT  CAST(SWITCHOFFSET (@PurchaseDate , '+00:00') AS DATETIME)
Run Code Online (Sandbox Code Playgroud)

请查看此博客以获取更多信息。

http://blogs.msdn.com/b/bartd/archive/2009/03/31/the-death-of-datetime.aspx

  • “SWITCHOFFSET”将“DATETIMEOFFSET”调整为不同的时区,但它仍然指的是同一实际时刻。我相信您的 SELECT 示例实际上只会显示原始购买的 UTC 时间,而不是所需的当地时间。(您的答案的第一部分对于该问题是正确的。第二部分可能不相关,但可能会误导所提出的问题。) (2认同)