DATE_ADD(date,INTERVAL expr unit), DATE_SUB(date,INTERVAL expr unit)
SELECT DATE_ADD('2018-05-01',INTERVAL 1 DAY);
'2018-05-02'
SELECT DATE_SUB('2018-05-01',INTERVAL 1 YEAR);
'2017-05-01'
SELECT DATE_ADD('2020-12-31 23:59:59',
INTERVAL 1 SECOND);
'2021-01-01 00:00:00'
SELECT DATE_ADD('2018-12-31 23:59:59',
INTERVAL 1 DAY);
'2019-01-01 23:59:59'
SELECT DATE_ADD('2100-12-31 23:59:59',
INTERVAL '1:1' MINUTE_SECOND);
'2101-01-01 00:01:00'
SELECT DATE_SUB('2025-01-01 00:00:00',
INTERVAL '1 1:1:1' DAY_SECOND);
'2024-12-30 22:58:59'
SELECT DATE_ADD('1900-01-01 00:00:00',
INTERVAL '-1 10' DAY_HOUR);
'1899-12-30 14:00:00'
SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
'1997-12-02'
SELECT DATE_ADD('1992-12-31 23:59:59.000002',
INTERVAL '1.999999' SECOND_MICROSECOND);
'1993-01-01 00:00:01.000001'
These functions perform date arithmetic. The date argument specifies the starting date or datetime value. expr is an expression specifying the interval value to be added or subtracted from the starting date. expr is evaluated as a string; it may start with a - for negative intervals. unit is a keyword indicating the units in which the expression should be interpreted.
SELECT DATE_ADD('2018-05-01',INTERVAL 1 DAY);
'2018-05-02'
SELECT DATE_SUB('2018-05-01',INTERVAL 1 YEAR);
'2017-05-01'
SELECT DATE_ADD('2020-12-31 23:59:59',
INTERVAL 1 SECOND);
'2021-01-01 00:00:00'
SELECT DATE_ADD('2018-12-31 23:59:59',
INTERVAL 1 DAY);
'2019-01-01 23:59:59'
SELECT DATE_ADD('2100-12-31 23:59:59',
INTERVAL '1:1' MINUTE_SECOND);
'2101-01-01 00:01:00'
SELECT DATE_SUB('2025-01-01 00:00:00',
INTERVAL '1 1:1:1' DAY_SECOND);
'2024-12-30 22:58:59'
SELECT DATE_ADD('1900-01-01 00:00:00',
INTERVAL '-1 10' DAY_HOUR);
'1899-12-30 14:00:00'
SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
'1997-12-02'
SELECT DATE_ADD('1992-12-31 23:59:59.000002',
INTERVAL '1.999999' SECOND_MICROSECOND);
'1993-01-01 00:00:01.000001'
For more information about temporal interval syntax, including a full list of unit specifiers, the expected form of the expr argument for each unit value, and rules for operand interpretation in temporal arithmetic, see Temporal Intervals.
SELECT DATE_ADD('2024-03-30', INTERVAL 1 MONTH) AS d1,
> DATE_ADD('2024-03-31', INTERVAL 1 MONTH) AS d2;
+------------+------------+
| d1 | d2 |
+------------+------------+
| 2024-04-30 | 2024-04-30 |
+------------+------------+
1 row in set (0.00 sec)