DATEDIFF,具有特定的截止时间

时间:2019-06-18 16:58:51

标签: sql sql-server

我正在尝试计算2个日期和时间之间的天数,但需要在19:00而不是00:00截止

select datediff (dd, '2019-03-14 19:28:00','2019-03-19 10:07:00'),
       datediff (dd, '2019-03-14 19:34:00','2019-03-22 10:20:00'),
       datediff (dd, '2019-03-14 17:13:00','2019-03-25 19:17:00') 

我希望得到以下结果:

'2019-03-14 19:28:00','2019-03-19 10:07:00' = 4, has only passed the 19:00 cut off 4 times.

'2019-03-14 19:34:00','2019-03-22 10:20:00' = 7

'2019-03-14 17:13:00','2019-03-25 19:17:00' = 12

由于SQL将截止时间设为00:00,因此SQL分别将其计算为5、8、11

2 个答案:

答案 0 :(得分:1)

只需添加五个小时:

select datediff(day, dateadd(hour, 5, s), dateadd(hour, 5, e))
from (values ('2019-03-14 19:28:00', '2019-03-19 10:07:00'),
             ('2019-03-14 19:34:00','2019-03-22 10:20:00'),
             ('2019-03-14 17:13:00','2019-03-25 19:17:00') 
     ) v(s, e);

或等效地,减去19小时:

select datediff (day, dateadd(hour, -19, s), dateadd(hour, -19, e))
from (values ('2019-03-14 19:28:00', '2019-03-19 10:07:00'),
             ('2019-03-14 19:34:00','2019-03-22 10:20:00'),
             ('2019-03-14 17:13:00','2019-03-25 19:17:00') 
     ) v(s, e);

答案 1 :(得分:0)

如果您想使用19:00进行DATEDIFF,就好像是00:00,只需从所有datetime值中减去19小时,然后对它进行DATEDIFF。