MySQL | SUBDATE method
Start your free 7-days trial now!
MySQL's SUBDATE(~) method subtracts the specified interval from a date or datetime value.
Syntax
SELECT SUBDATE(date, INTERVAL expr unit);SELECT SUBDATE(date, days);
Parameters
1. date | date/datetime
The date or datetime to subtract the time interval from.
2. days | integer
The number of days to subtract from the provided date.
3. expr unit | integer with units
The interval to subtract from the provided date together with its units.
Refer to 'List of units' at the bottom of page for a valid list of units.
Either the days or expr unit parameter must be specified, they cannot be used together.
Return value
The result of subtracting the specified interval from date.
Examples
Consider the following information about some students:
student_id | fname | lname | day_enrolled | age | username |
|---|---|---|---|---|---|
1 | Sky | Towner | 2015-12-03 | 17 | stowner1 |
2 | Ben | Davis | 2016-04-20 | 19 | bdavis2 |
3 | Travis | Apple | 2018-08-14 | 18 | tapple3 |
4 | Arthur | David | 2016-04-01 | 16 | adavid4 |
5 | Benjamin | Town | 2014-01-01 | 17 | btown5 |
The above sample table can be created using the code here.
Basic usage
To subtract 2 days from student enrollment dates:
SELECT fname, day_enrolled, SUBDATE(day_enrolled, 2)FROM students;
+----------+--------------+--------------------------+| fname | day_enrolled | SUBDATE(day_enrolled, 2) |+----------+--------------+--------------------------+| Sky | 2015-12-03 | 2015-12-01 || Ben | 2016-04-20 | 2016-04-18 || Travis | 2018-08-14 | 2018-08-12 || Arthur | 2016-04-01 | 2016-03-30 || Benjamin | 2014-01-01 | 2013-12-30 |+----------+--------------+--------------------------+
To subtract 2 months from student enrollment dates:
SELECT fname, day_enrolled, SUBDATE(day_enrolled, INTERVAL 2 MONTH)FROM students;
+----------+--------------+-----------------------------------------+| fname | day_enrolled | SUBDATE(day_enrolled, INTERVAL 2 MONTH) |+----------+--------------+-----------------------------------------+| Sky | 2015-12-03 | 2015-10-03 || Ben | 2016-04-20 | 2016-02-20 || Travis | 2018-08-14 | 2018-06-14 || Arthur | 2016-04-01 | 2016-02-01 || Benjamin | 2014-01-01 | 2013-11-01 |+----------+--------------+-----------------------------------------+
Negative intervals
To add 1 day to a date:
SELECT SUBDATE('2020-01-01', -1);
+---------------------------+| SUBDATE('2020-01-01', -1) |+---------------------------+| 2020-01-02 |+---------------------------+
Note that there is a separate method ADDDATE(~) specifically for adding intervals to a date / datetime.
List of units
The below table represents a list of units that are supported:
Unit | Expected Input Format |
|---|---|
MICROSECOND |
|
SECOND |
|
MINUTE |
|
HOUR |
|
DAY |
|
WEEK |
|
MONTH |
|
QUARTER |
|
YEAR |
|
SECOND_MICROSECOND |
|
MINUTE_MICROSECOND |
|
MINUTE_SECOND |
|
HOUR_MICROSECOND |
|
HOUR_SECOND |
|
HOUR_MINUTE |
|
DAY_MICROSECOND |
|
DAY_SECOND |
|
DAY_MINUTE |
|
DAY_HOUR |
|
YEAR_MONTH |
|