最后于 更新
DATEDIFF
描述
DATEDIFF 函数计算两个 DATE、DATETIME 或 TIMESTAMP_NS 值之间的差值,结果精确到天,即返回 expr1 减去 expr2 所得到的天数差。该函数仅使用日期部分,忽略时间部分的小时、分钟、秒和小数秒。
该函数与 mysql 中的 datediff 函数 行为一致
语法
DATEDIFF(<expr1>, <expr2>)
参数
| 参数 | 说明 |
|---|---|
<expr1> | 日期被减数,支持 DATE、DATETIME 或 TIMESTAMP_NS。 |
<expr2> | 日期减数,支持 DATE、DATETIME 或 TIMESTAMP_NS。 |
返回值
返回 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 |
+-----------------------------------------------------------------------------------+
-- 任一参数均可使用 TIMESTAMP_NS
SELECT DATEDIFF(CAST('2024-01-02 00:00:00.000000001' AS TIMESTAMP_NS),
CAST('2024-01-01 23:59:59.999999' AS DATETIME(6))) AS result;
+--------+
| result |
+--------+
| 1 |
+--------+
--- 任一参数为 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)