Как я могу получить час между двумя datetime в sql? - PullRequest
0 голосов
/ 22 ноября 2018

Ниже sql показывает 57 часов, но это 44 часа.Как я могу решить.

SELECT  DATEDIFF(Hour,'2018-11-20 2:26:38.000','2018-11-22 11:00:29.367')

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Если не ставить перед часами две цифры, похоже, это может быть проблемой, если однозначно сделать это днем, вы получите результат.

/*------------------------
SELECT  DATEDIFF(Hour,'2018-11-20 14:26:38.000','2018-11-22 11:00:29.367')
------------------------*/

45

Ваш формат даты и времени по умолчанию, вероятно, равен 12 часам,и «2:…» обрабатывается как pm.

Использование двух цифр для часа должно помочь.

/*------------------------
SELECT  DATEDIFF(Hour,'2018-11-20 02:26:38.000','2018-11-22 11:00:29.367')
------------------------*/

57

(SQL Server имеет большую обратную совместимость, которая может быть вызванаввод не отформатирован точно, форматы даты / времени ISO всегда используют две цифры для часов, минут и секунд.)

Если вы используете клиент (а не фиксированный код в сохраненном процессе / функции / триггере)/…) Параметризация ваших запросов позволяет избежать этой проблемы: передавать данные как тип даты-время напрямую, без необходимости преобразования в строку.

0 голосов
/ 22 ноября 2018

Использовать 24-часовой формат в обе даты

SELECT  DATEDIFF(Hour,'2018-11-20 14:26:38.000','2018-11-22 11:00:29.367')
...