MySQL | DATE_SUB method
Start your free 7-days trial now!
MySQL's DATE_SUB(~)
method subtracts the specified time interval from a date or datetime value.
Syntax
SELECT DATE_SUB(date, INTERVAL expr unit);
Parameters
1. date
| date/datetime
The date / datetime to subtract the time interval from.
2. 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.
Return value
The result of subtracting the specified interval from date
.
Examples
Consider the following table 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, DATE_SUB(day_enrolled, INTERVAL 2 DAY)FROM students;
+----------+--------------+----------------------------------------+| fname | day_enrolled | DATE_SUB(day_enrolled, INTERVAL 2 DAY) |+----------+--------------+----------------------------------------+| 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, DATE_SUB(day_enrolled, INTERVAL 2 MONTH)FROM students;
+----------+--------------+------------------------------------------+| fname | day_enrolled | DATE_SUB(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 DATE_SUB('2020-01-01', INTERVAL -1 DAY);
+-----------------------------------------+| DATE_SUB('2020-01-01', INTERVAL -1 DAY) |+-----------------------------------------+| 2020-01-02 |+-----------------------------------------+
Note that there is a separate method DATE_ADD(~) 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 |
|