跳到主要内容

DATEDIFF

描述

DATEDIFF 函数用于计算两个日期或日期时间值之间的差值,结果精确到天,即返回 expr1 减去 expr2 所得到的天数差。该函数仅关注日期部分,忽略时间部分的具体小时、分钟、秒。

该函数与 mysql 中的 datediff 函数 行为一致

语法

DATEDIFF(<expr1>, <expr2>)

参数

参数说明
<expr1>日期被减数,支持的类型为 datetime 或者 date 类型,具体 datetime 和 date 格式请查看 datetime 的转换date 的转换)
<expr2>日期减数,支持的类型为 date 和 datetime

返回值

返回 expr1 - expr2 的值,结果精确到天,类型为 INT。

特殊情况:

  • expr1 大于 expr2 ,返回正数,反之返回负数
  • 若输入任一参数为 NULL, 返回 NULL.
  • 忽略时间部分

举例


-- 两个日期相差1天(忽略时间部分)
select datediff(CAST('2007-12-31 23:59:59' AS DATETIME), CAST('2007-12-30' AS DATETIME));

+-----------------------------------------------------------------------------------+
| datediff(CAST('2007-12-31 23:59:59' AS DATETIME), CAST('2007-12-30' AS DATETIME)) |
+-----------------------------------------------------------------------------------+
| 1 |
+-----------------------------------------------------------------------------------+

-- 前一个日期早于后一个日期,返回负数
select datediff(CAST('2010-11-30 23:59:59' AS DATETIME), CAST('2010-12-31' AS DATETIME));

+-----------------------------------------------------------------------------------+
| datediff(CAST('2010-11-30 23:59:59' AS DATETIME), CAST('2010-12-31' AS DATETIME)) |
+-----------------------------------------------------------------------------------+
| -31 |
+-----------------------------------------------------------------------------------+

--- 任一参数为 NULL
mysql> select datediff('2023-01-01', NULL);
+------------------------------+
| datediff('2023-01-01', NULL) |
+------------------------------+
| NULL |
+------------------------------+

---若输入 datetime 类型,会忽略时间部分
select datediff('2023-01-02 13:00:00', '2023-01-01 12:00:00');
+--------------------------------------------------------+
| datediff('2023-01-02 13:00:00', '2023-01-01 12:00:00') |
+--------------------------------------------------------+
| 1 |
+--------------------------------------------------------+

select datediff('2023-01-02 12:00:00', '2023-01-01 13:00:00');
+--------------------------------------------------------+
| datediff('2023-01-02 12:00:00', '2023-01-01 13:00:00') |
+--------------------------------------------------------+
| 1 |
+--------------------------------------------------------+
1 row in set (0.01 sec)