Function Reference

SUBDATE

Subtracts a time interval or a number of days from a date.

MySQL 8.4
SUBDATE(date, INTERVAL expr unit | days)
  • a | bone of the options
date
Source date or datetime
DATE
INTERVAL expr unit
Interval to subtract, for example INTERVAL 10 DAY
expr
How many units to subtract
unit
Interval unit
Keyword
MICROSECONDSECONDMINUTEHOURDAYWEEKMONTHQUARTERYEARSECOND_MICROSECONDMINUTE_MICROSECONDMINUTE_SECONDHOUR_MICROSECONDHOUR_SECONDHOUR_MINUTEDAY_MICROSECONDDAY_SECONDDAY_MINUTEDAY_HOURYEAR_MONTH
days
Number of days, a short form instead of INTERVAL
INT

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 a date

MySQL 8.4
SELECT SUBDATE('2022-06-16', INTERVAL 10 DAY) AS new_date;
new_date
2022-06-06

Short form with days

MySQL 8.4
SELECT SUBDATE('2022-06-16', 10) AS new_date;
new_date
2022-06-06

Compound interval unit

MySQL 8.4
SELECT SUBDATE('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