每天两小时的SQL差异

时间:2017-02-02 15:05:21

标签: sql postgresql

我输入了:'2017-02-02 11:00:00'和'2017-02-13 15:00:00'

我想知道这些日子之间的小时差异,但有一个转折:我需要知道每天的小时数。

结果看起来像

'2017-02-02', '13'
'2017-02-03', '24'
...
'2017-02-13', '15'

如果只有几个小时,那么我会使用DATEDIFF,但假设扭曲我不知道如何开始。我很感激任何想法。

ps:可以有不同的输入,例如'2017-02-02 11:00:00'和'2017-02-02 15:00:00'

2 个答案:

答案 0 :(得分:1)

您可以使用generate_series生成所有日期时间,起始日期和结束日期之间的间隔为1小时。然后,您可以按日期部分进行分组,以获得每天工作的小时数。

select dt_time::date,count(*) as hours_by_day
from (select generate_series('2017-02-02 11:00:00','2017-02-13 15:00:00',interval '1 hour') as dt_time
     ) x
group by dt_time::date
order by 1

答案 1 :(得分:1)

一种方法使用generate_series()和一些算术:

with dates as (
      select gs.dte, $date1 as dte1, $date2 as dte2
      from generate_series(date_trunc('day', $date1), date_trunc('day', $date2), interval '1 day') gs(dte)
     )
select gs.dte,
       (case when dte1 > gs.dte and dte2 < gs.dte then 24
             when date_trunc('day', dte2) = gs.dte then 24 - extract(hour from dte1)
             else extract(hour from dte2)
        end) as hours
from dates;