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