DATEDIFF(date1, date2) 返回 date1 和 date2 之间的天数差。MySQL中的时间间隔表达式用于在日期和时间计算中添加或减去指定的时间单位,这些表达式通常用于DATE_ADD()和DATE_SUB()函数中,以实现对日期和时间的加减运算,以下是一些常见的用法示例:
1、基本用法:
DATE_ADD(date, INTERVAL expr unit):向指定日期添加时间间隔。

DATE_SUB(date, INTERVAL expr unit):从指定日期减去时间间隔。
2、示例:
添加一天:SELECT DATE_ADD('20180501', INTERVAL 1 DAY); 结果为'20180502'。
减去一年:SELECT DATE_SUB('20180501', INTERVAL 1 YEAR); 结果为'20170501'。
添加一秒:SELECT DATE_ADD('20181231 23:59:59', INTERVAL 1 SECOND); 结果为'20190101 00:00:00'。
3、复杂时间间隔:
添加1小时1分钟:SELECT DATE_ADD('20181231 23:59:59', INTERVAL '1:1' MINUTE_SECOND); 结果为'20190101 01:01:00'。
减去1天2小时:SELECT DATE_SUB('20250101 00:00:00', INTERVAL '1 1:1:1' DAY_SECOND); 结果为'20241230 22:58:59'。
4、使用负值:
添加负值表示减去相应的时间间隔。SELECT DATE_ADD('19000101 00:00:00', INTERVAL '1 10' DAY_HOUR); 结果为'18991230 14:00:00'。
5、特殊单位:
微秒级别:SELECT DATE_ADD('19921231 23:59:59.000002', INTERVAL '1.999999' SECOND_MICROSECOND); 结果为'19930101 00:00:01.000001'。
6、在SELECT语句中的直接运算:
SELECT '20181231 23:59:59' + INTERVAL 1 SECOND; 结果为'20190101 00:00:00'。
SELECT INTERVAL 1 DAY + '20181231'; 结果为'20190101'。
7、错误处理:
如果传入的日期格式不完整或错误,如'20230101'加一小时会报错,因为'20230101'不是完整的日期时间格式,正确的应为'20230101 00:00:00'。
时间间隔单位及其意义
| 单位 | 描述 |
| YEAR | 年 |
| MONTH | 月 |
| WEEK | 周 |
| DAY | 天 |
| HOUR | 小时 |
| MINUTE | 分钟 |
| SECOND | 秒 |
| YEAR_MONTH | 年和月 |
| DAY_HOUR | 天和小时 |
| DAY_MINUTE | 天和分钟 |
| DAY_SECOND | 天和秒 |
| HOUR_MINUTE | 小时和分钟 |
| MINUTE_SECOND | 分钟和秒 |
| SECOND_MICROSECOND | 秒和微秒 |
| YEAR_MONTH | 年和月 |
FAQs
Q1: 如何在MySQL中计算两个日期之间的天数差?
可以使用DATEDIFF()函数来计算两个日期之间的天数差,要计算20240101和20240115之间的天数差,可以使用以下SQL语句:
SELECT DATEDIFF('20240115', '20240101') AS days_difference;
这将返回14,表示两个日期之间相差14天。
Q2: 如何在MySQL中获取当前日期和时间并加上特定的时间间隔?
可以使用NOW()函数获取当前日期和时间,然后使用DATE_ADD()函数加上特定的时间间隔,要获取当前日期和时间并加上7天,可以使用以下SQL语句:
SELECT DATE_ADD(NOW(), INTERVAL 7 DAY) AS new_date;
这将返回当前日期和时间加上7天后的日期和时间。