Function Reference

DATE_ADD

Adds a time interval to a date.

MySQL 8.1
DATE_ADD(date, INTERVAL expr unit)

Parameters

dateDATE
Source date or datetime
INTERVAL expr unitkeyword
Interval to add: amount expr and unit, for example INTERVAL 7 DAY
Values:MICROSECONDSECONDMINUTEHOURDAYWEEKMONTHQUARTERYEARSECOND_MICROSECONDMINUTE_MICROSECONDMINUTE_SECONDHOUR_MICROSECONDHOUR_SECONDHOUR_MINUTEDAY_MICROSECONDDAY_SECONDDAY_MINUTEDAY_HOURYEAR_MONTH

Return value

A date if days or larger units are added to a date, otherwise a datetime; if the month has no such day, its last day is used

Examples

A week added to payment dates

MySQL 8.1
SELECT payment_id,
	date,
	DATE_ADD(date, INTERVAL 7 DAY) AS due_date
FROM Payments;
payment_iddatedue_date
12005-02-122005-02-19
22005-03-232005-03-30
32005-05-142005-05-21
42005-07-222005-07-29
52005-07-262005-08-02
62005-02-202005-02-27
72005-07-302005-08-06
82005-09-122005-09-19
92005-09-302005-10-07
102005-10-272005-11-03

A month added to January 31

MySQL 8.1
SELECT DATE_ADD('2024-01-31', INTERVAL 1 MONTH) AS new_date;
new_date
2024-02-29

Compound interval unit

MySQL 8.1
SELECT DATE_ADD(
		'2022-06-16 10:00:00',
		INTERVAL '1:30' HOUR_MINUTE
	) AS new_date;
new_date
2022-06-16 11:30:00

Details

Instead of the function, you can add or subtract an interval with an operator: date + INTERVAL 7 DAY. PostgreSQL has no such function: a date is shifted with the same operator, but the interval is written as a string: date + INTERVAL '7 days'.

Compound unitFormat of the expr stringExample
SECOND_MICROSECONDseconds.microseconds'10.000500'
MINUTE_MICROSECONDminutes:seconds.microseconds'5:10.000500'
MINUTE_SECONDminutes:seconds'5:10'
HOUR_MICROSECONDhours:minutes:seconds.microseconds'2:05:10.000500'
HOUR_SECONDhours:minutes:seconds'2:05:10'
HOUR_MINUTEhours:minutes'1:30'
DAY_MICROSECONDdays hours:minutes:seconds.microseconds'1 2:05:10.000500'
DAY_SECONDdays hours:minutes:seconds'1 2:05:10'
DAY_MINUTEdays hours:minutes'1 2:05'
DAY_HOURdays hours'1 12'
YEAR_MONTHyears-months'1-6'

See also