繁体   English   中英

SQL Query中的DateTime转换和比较

[英]DateTime conversion and comparison in SQL Query

我有一个用于从表中提取报告的 sql 查询。 这个想法是在当地时区提取按星期几分组的计数总和。 表中的日期以 UTC 存储。

SELECT (SUM(t.di1) + SUM(t.di2) + SUM(t.di3) + SUM(t.di4)) AS [ScanCount],
       DATEPART(WEEKDAY, t.LocalTime) AS [weekday]
FROM (SELECT di1,
             di2,
             di3,
             di4,
             CreatedOnUTC AT TIME ZONE 'UTC' AT TIME ZONE 'Pacific Standard Time' AS LocalTime
      FROM tableName
      WHERE DeviceId = 649754) t
WHERE t.LocalTime > '03/16/2020 00:00'
  AND t.LocalTime < '03/16/2020 23:59:59'
GROUP BY DATEPART(WEEKDAY, t.LocalTime)
ORDER BY DATEPART(WEEKDAY, t.LocalTime);

像这样的查询应该只返回一周中的一天计数,但它返回 2 天。 这显然与时区的差异有关,而 UTC 时间包含 3/15 和 3/16 的日期。 从 UTC 到太平洋时间的转换似乎在输出中起作用,但在 where 子句中使用了 UTC 值。 如何与新转换的日期时间而不是原始 UTC 时间进行比较?

datetimeoffset 和字符串文字之间的比较在 UTC 中有效。
最简单的解决方案是将 datetimeoffset 转换为 datetime2。 将您的内部查询修改为:

cast(CreatedOnUTC AT TIME ZONE 'UTC' AT TIME ZONE 'Pacific Standard Time' as datetime2(0)) AS LocalTime

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM