小编ofl*_*ero的帖子

如何有效地按指定时区的日期分组?

我目前正在运行一个聚合查询,汇总给定日期的销售量(比如)。

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 数据库上进行操作。

sql t-sql sql-server date azure-sql-database

5
推荐指数
1
解决办法
3786
查看次数

标签 统计

azure-sql-database ×1

date ×1

sql ×1

sql-server ×1

t-sql ×1