寻求按日期和小时分组的简洁SQL代码:优化DATETIME截断脚本
按日期和小时分组的简洁实现方案
你原脚本的作用是将当前时间(GETDATE())截断到小时,并格式化为yyyy-MM-dd HH:00:00.00的字符串格式,针对大数据表分组场景,以下几种更简洁且低开销的写法可以替代:
1. 纯日期运算(推荐,性能最优)
这种方式通过日期偏移计算直接截断到小时,返回datetime类型,避免了大量字符串拼接操作,非常适合大数据表分组:
SELECT DATEADD(HOUR, DATEDIFF(HOUR, 0, GETDATE()), 0)
如果需要和原脚本完全一致的字符串格式,只需套一层CONVERT:
SELECT CONVERT(VARCHAR(19), DATEADD(HOUR, DATEDIFF(HOUR, 0, GETDATE()), 0), 120) + '.00'
其中120是SQL Server的日期样式码,对应yyyy-MM-dd HH:mm:ss格式,追加.00即可匹配原脚本的输出结尾。
2. 直接格式化(SQL Server 2012+)
如果你的SQL Server版本在2012及以上,可以用FORMAT函数一步到位生成目标字符串:
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd HH:00:00.00')
注意:FORMAT的性能略低于纯日期运算的方式,大数据量场景优先推荐第一种方案。
内容的提问来源于stack exchange,提问作者Leo Torres
相关产品推荐
相关产品推荐

