我目前正在运行一个聚合查询,汇总给定日期的销售量(比如)。
select convert(date, datetimesold), sum(amountsold) from tblSold
group by convert(date, datetimesold)
Run Code Online (Sandbox Code Playgroud)
其中 datetimesold 是日期时间值。
在convert(date,...)
摆脱了时间价值,所以group by
通过整整一天能集团。
这已经不是很有效了,因为它需要对每行的转换进行表扫描 - 更好的方法是添加一个仅包含日期值的“datesold”列,索引,并在每次插入时包含此值。但这会失去该列的精度,这很重要,因为......
datetimesold
是 UTC 日期时间。所以我的问题是:假设我想按天分组,但在美国东部时间。在按以下方式在组中进行转换之前,我必须在 datetimesold 中添加一个以小时为单位的偏移量 - group by convert(date, dateadd(hours, -5, datetimesold))
- 但即便如此,由于夏令时,这并不总是准确的 - EDT -4 小时,EST -5 小时。
在 SQL 中我是否有任何有效的选择来执行此操作?我可以在这里使用任何时区感知功能吗?
编辑:为了进一步澄清,我在 Azure SQL 数据库上进行操作。