Function Reference

DATE_SUB

Subtracts a time interval from a date.

MySQL 8.1
DATE_SUB(date, INTERVAL expr unit)

Parameters

dateDATE
Source date or datetime
INTERVAL expr unitkeyword
Interval to subtract: amount expr and unit, for example INTERVAL 1 MONTH
Values:MICROSECONDSECONDMINUTEHOURDAYWEEKMONTHQUARTERYEARSECOND_MICROSECONDMINUTE_MICROSECONDMINUTE_SECONDHOUR_MICROSECONDHOUR_SECONDHOUR_MINUTEDAY_MICROSECONDDAY_SECONDDAY_MINUTEDAY_HOURYEAR_MONTH

Return value

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

Examples

Ten days before birthdays

MySQL 8.1
SELECT member_name,
	birthday,
	DATE_SUB(birthday, INTERVAL 10 DAY) AS reminder_date
FROM FamilyMembers;
member_namebirthdayreminder_date
Headley Quincey1960-05-131960-05-03
Flavia Quincey1963-02-161963-02-06
Andie Quincey1983-06-051983-05-26
Lela Quincey1985-06-071985-05-28
Annie Quincey1988-04-101988-03-31
Ernest Forrest1961-09-111961-09-01
Constance Forrest1968-09-061968-08-27
Wednesday Addams2005-01-132005-01-03

A month before March 31

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

Compound interval unit

MySQL 8.1
SELECT DATE_SUB('2022-06-16', INTERVAL '1 12' DAY_HOUR) AS new_date;
new_date
2022-06-14 12:00: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