Skip to main content
Last updated on

HOURS_DIFF

Description

The HOURS_DIFF function calculates the complete hour difference between two DATE, DATETIME, or TIMESTAMP_NS values, representing the number of hours elapsed from the start time to the end time. It automatically handles differences across days, months, and years. A DATE input is treated as 00:00:00.

Syntax

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

Parameters

ParameterDescription
<date_or_time_expr1>End time, a valid date expression that supports DATE/DATETIME/TIMESTAMP_NS types. For specific datetime and date formats, please refer to datetime conversion and date conversion
<date_or_time_expr2>Start time, a valid date expression that supports DATE/DATETIME/TIMESTAMP_NS types and strings in datetime format

Return Value

Returns BIGINT type, representing the hour difference between <date_or_time_expr1> and <date_or_time_expr2>.

  • If <date_or_time_expr1> is later than <date_or_time_expr2>, returns a positive number; if earlier, returns a negative number.
  • If any input parameter is NULL, returns NULL.
  • Including minute and below unit, if the actual difference is less than one hour, the calculation result is reduced by one.

Examples


-- 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 |
+--------------------------------+