sql—为一天中给定的时间以15分钟的时间间隔生成和分类行

uz75evzq  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(385)

我已经在表中有一个名为'timeofday'的列,它包含一个以分钟为增量的时间,比如02:01:00,02:02:00,02:03:00,02:04:00等等,我想添加一个名为'15minutespan'的新列,它应该以15分钟的间隔来分类timeofday。
例如,如果timeofday-02:01:00,则15minutespan列应显示2:00-2:15,如果timeofday-02:16:00,则15minutespan列应显示2:15-2:30,依此类推。
“15分钟跨度”中的数据应与所附屏幕截图中的数据相同。
任何快速的帮助都是非常感谢的。
在此处输入图像描述

uidvcgyl

uidvcgyl1#

这应该是可行的(假设一天的时间是 TIME 数据类型,否则需要转换)。将其转换为计算列可能是最有意义的。

SELECT
  FORMAT(DATEADD(minute,-1*DATEPART(minute,@time)%15,TimeOfDay),'hh\:mm') + ' - ' + FORMAT(DATEADD(minute,15-DATEPART(minute,@time)%15,TimeOfDay),'hh\:mm')

如果希望间隔不重叠(14:00-14:14、14:15-14:29等),则只需将其更改为

SELECT
  FORMAT(DATEADD(minute,-1*DATEPART(minute,@time)%15,TimeOfDay),'hh\:mm') + ' - ' + FORMAT(DATEADD(minute,14-DATEPART(minute,@time)%15,TimeOfDay),'hh\:mm')

请注意,“24:00”不是的显示值 TIME ,如果你想要 23:45 - 24:00 你得把时间和分钟分开,从那里把东西缝合起来。
测试代码:

DECLARE @time TIME;

SET @time = '01:00:00.000' --Should return 01:00 - 01:15

SELECT FORMAT(DATEADD(minute,-1*DATEPART(minute,@time)%15,@time),'hh\:mm') + ' - ' + FORMAT(DATEADD(minute,15-DATEPART(minute,@time)%15,@time),'hh\:mm')

SET @time = '01:00:00.001' --Should return 01:00 - 01:15

SELECT FORMAT(DATEADD(minute,-1*DATEPART(minute,@time)%15,@time),'hh\:mm') + ' - ' + FORMAT(DATEADD(minute,15-DATEPART(minute,@time)%15,@time),'hh\:mm')

SET @time = '01:14:59.999' --Should return 01:00 - 01:15

SELECT FORMAT(DATEADD(minute,-1*DATEPART(minute,@time)%15,@time),'hh\:mm') + ' - ' + FORMAT(DATEADD(minute,15-DATEPART(minute,@time)%15,@time),'hh\:mm')

SET @time = '01:15:00.000' --Should return 01:15 - 01:30

SELECT FORMAT(DATEADD(minute,-1*DATEPART(minute,@time)%15,@time),'hh\:mm') + ' - ' + FORMAT(DATEADD(minute,15-DATEPART(minute,@time)%15,@time),'hh\:mm')

SET @time = '13:45:00.000' --Should return 13:45 - 14:00

SELECT FORMAT(DATEADD(minute,-1*DATEPART(minute,@time)%15,@time),'hh\:mm') + ' - ' + FORMAT(DATEADD(minute,15-DATEPART(minute,@time)%15,@time),'hh\:mm')

SET @time = '13:45:00.001' --Should return 13:45 - 14:00

SELECT FORMAT(DATEADD(minute,-1*DATEPART(minute,@time)%15,@time),'hh\:mm') + ' - ' + FORMAT(DATEADD(minute,15-DATEPART(minute,@time)%15,@time),'hh\:mm')

SET @time = '14:00:00.000' --Should return 14:00 - 14:15

SELECT FORMAT(DATEADD(minute,-1*DATEPART(minute,@time)%15,@time),'hh\:mm') + ' - ' + FORMAT(DATEADD(minute,15-DATEPART(minute,@time)%15,@time),'hh\:mm')
iih3973s

iih3973s2#

我建议将时间四舍五入到15分钟增量,如下所示:

select convert(time,
               dateadd(minute, (datepart(minute, timeofday) / 15) * 15,
                       dateadd(hour, datepart(hour, timeofday), 0
                      )
                              )
              ) as quarter_hour_start

相关问题