跳到主要内容

HOURS_DIFF

描述

HOURS_DIFF 函数用于计算两个日期时间或日期之间的小时差值,即从起始时间到结束时间所经过的小时数。该函数支持 DATE 和 DATETIME 两种输入类型,自动处理跨天、跨月、跨年的时间差计算,并返回整数结果,若输入为 DATE 类型(仅包含年月日),默认其时间部分为 00:00:00

语法

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

参数

参数说明
<date_or_time_expr1>结束时间,参数是合法的日期表达式,支持输入 date/datetime 类型,具体 datetime,date格式请查看 datetime 的转换date 的转换
<date_or_time_expr2>开始时间,参数是合法的日期表达式,支持输入 date/datetime 类型和符合日期时间格式的字符串

返回值

返回类型为 BIGINT,表示 <date_or_time_expr1><date_or_time_expr2> 之间的小时差值

  • <date_or_time_expr1> 晚于 <date_or_time_expr2>,返回正数;若早于,则返回负数。
  • 若输入参数为 NULL,返回 NULL。
  • 包含分钟以下单位,若实际差值不足一小时,计算结果减一

举例


---结束时间晚于开始时间,返回正数
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 |
+----------------------------------------------------------+

---结束时间早于开始时间,返回负数
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 |
+----------------------------------------------------------+

---包含分钟以下单位,若实际差值不足一小时,计算结果减一
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 |
+----------------------------------------------------------+

---结束时间为 date,默认算作 00:00:00 开始
select hours_diff('2023-12-31', '2023-12-30 12:00:00');

+-------------------------------------------------+
| hours_diff('2023-12-31', '2023-12-30 12:00:00') |
+-------------------------------------------------+
| 12 |
+-------------------------------------------------+

---任一参数为 NULL ,返回 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 |
+--------------------------------+