计算时间范围内的值(SQL)

时间:2020-05-22 09:29:52

标签: sql sql-server tsql

我正在尝试进行一个sql查询,该查询中我要计算三个范围内的人数:

Tomorrow (from 06:00 a.m. to 12:00 p.m.)
Afternoon (from 12:00 p.m. to 9:00 p.m.)
Night (from 9:00 p.m. to 6:00 a.m.)

我有两个属性,签入时间和签出时间,它们具有以下格式:

2020-05-20 12:10:29.000

我正在通过以下方式执行此操作,但例如在夜间,它不起作用:

select (case when datepart(hour, dateIn) > datepart(hour, '21')) and
                  datepart(minute, dateIn) > datepart(minute, '00'))

1 个答案:

答案 0 :(得分:1)

如果我的理解正确,您可以减去6个小时以获得日期,然后使用时间比较进行轮班。所以,我想你想要

select convert(date, dateadd(hour, -6, t.datein)), v.shift, count(*)
from t cross apply
     (values (case when convert(time, t.datein) < '06:00:00' then 'night'
                   when convert(time, t.datein) < '12:00:00' then 'morning'
                   when convert(time, t.datein) < '21:00:00' then 'afternoon'
                   else 'night'
              end)
     ) v(shift)
group by convert(date, dateadd(hour, -6, datein)), v.shift;