DATEDIFF с определенным временем отключения - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь подсчитать количество дней между двумя датами и временем, но мне нужно сократить время в 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 вычисляет их как 5, 8, 11 соответственно, потому что это сокращает выходные дни в 00: 00

Ответы [ 2 ]

1 голос
/ 18 июня 2019

Просто добавьте пять часов:

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);
0 голосов
/ 18 июня 2019

Если вы хотите сделать DATEDIFF, используя 19:00, как если бы это было 00:00, просто вычтите 19 часов из всех значений даты и времени и сделайте DATEDIFF для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...