Перейти к содержимому
Последнее обновление

HOURS_DIFF

Описание​

Функция HOURS_DIFF вычисляет разницу в полных часах между двумя значениями DATE, DATETIME или TIMESTAMP_NS, то есть количество часов, прошедших от начального до конечного времени. Она автоматически учитывает переходы между днями, месяцами и годами. Для входного значения DATE время принимается равным 00:00:00.

Синтаксис​

HOURS_DIFF(`<date_or_time_expr1>`, `<date_or_time_expr2>`)

Параметры​

ПараметрОписание
<date_or_time_expr1>Конечное время: допустимое выражение даты, поддерживающее типы DATE/DATETIME/TIMESTAMP_NS. Подробнее о форматах даты и времени см. в разделах Преобразование даты и времени и Преобразование даты
<date_or_time_expr2>Начальное время: допустимое выражение даты, поддерживающее типы DATE/DATETIME/TIMESTAMP_NS и строки в формате даты и времени

Возвращаемое значение​

Возвращает значение типа BIGINT, представляющее разницу в часах между <date_or_time_expr1> и <date_or_time_expr2>.

  • Если <date_or_time_expr1> позже, чем <date_or_time_expr2>, возвращает положительное число; если раньше — отрицательное.
  • Если любой входной параметр равен NULL, возвращает NULL.
  • При учёте минут и более мелких единиц времени, если фактическая разница меньше одного часа, результат вычисления уменьшается на единицу.

Примеры​


-- End time is later than start time, returns positive number
SELECT HOURS_DIFF('2020-12-25 22:00:00', '2020-12-25 21:00:00');
+----------------------------------------------------------+
| HOURS_DIFF('2020-12-25 22:00:00', '2020-12-25 21:00:00') |
+----------------------------------------------------------+
| 1 |
+----------------------------------------------------------+

-- End time is earlier than start time, returns negative number
select hours_diff('2020-12-25 20:00:00', '2020-12-25 21:00:00');
+----------------------------------------------------------+
| hours_diff('2020-12-25 20:00:00', '2020-12-25 21:00:00') |
+----------------------------------------------------------+
| -1 |
+----------------------------------------------------------+

-- Contains minute time, if actual difference is less than one hour, calculation result is reduced by one
select hours_diff('2020-12-25 20:59:00', '2020-12-25 21:00:00');
+----------------------------------------------------------+
| hours_diff('2020-12-25 20:59:00', '2020-12-25 21:00:00') |
+----------------------------------------------------------+
| 0 |
+----------------------------------------------------------+

-- End time is date type, defaults to 00:00:00 start
select hours_diff('2023-12-31', '2023-12-30 12:00:00');
+-------------------------------------------------+
| hours_diff('2023-12-31', '2023-12-30 12:00:00') |
+-------------------------------------------------+
| 12 |
+-------------------------------------------------+

-- Any parameter is NULL, return NULL
select hours_diff(null, '2023-10-01') ;
+--------------------------------+
| hours_diff(null, '2023-10-01') |
+--------------------------------+
| NULL |
+--------------------------------+

select hours_diff('2023-12-31', NULL);
+--------------------------------+
| hours_diff('2023-12-31', NULL) |
+--------------------------------+
| NULL |
+--------------------------------+