In MySQL, you can use the DATE_SUB()
function to subtract a specified amount of time from a date. For example, you can use it to subtract 7 days from a given date. You can specify whether to subtract days, weeks, months, quarters, years, etc. You can also subtract a time value, such as seconds, microseconds, etc.
This function is similar to DATE_ADD()
, except that it subtracts from a date instead of adds to it.
Syntax
The syntax goes like this:
DATE_SUB(date,INTERVAL expr unit)
Example 1 – Basic Usage
Here’s an example of usage.
SELECT DATE_SUB('2021-05-07', INTERVAL 5 DAY) AS Result;
Result:
+------------+ | Result | +------------+ | 2021-05-02 | +------------+
This example subtracts 5 days from the date supplied by the first argument.
Example 2 – Other Date Units
You can specify the units in days, weeks, months, years, etc. Here are some examples.
SELECT '2021-05-07' AS 'Start Date', DATE_SUB('2021-05-07', INTERVAL 2 WEEK) AS '-2 Weeks', DATE_SUB('2021-05-07', INTERVAL 2 MONTH) AS '-2 Months', DATE_SUB('2021-05-07', INTERVAL 2 QUARTER) AS '-2 Quarters', DATE_SUB('2021-05-07', INTERVAL 2 YEAR) AS '-2 Years';
Result:
+------------+------------+------------+-------------+------------+ | Start Date | -2 Weeks | -2 Months | -2 Quarters | -2 Years | +------------+------------+------------+-------------+------------+ | 2021-05-07 | 2021-04-23 | 2021-03-07 | 2020-11-07 | 2019-05-07 | +------------+------------+------------+-------------+------------+
Example 3 – Time Units
You can also subtract time units from a date/time value. Here’s an example.
SELECT DATE_SUB('2021-05-07 10:00:00', INTERVAL 5 HOUR) AS Result;
Result:
+---------------------+ | Result | +---------------------+ | 2021-05-07 05:00:00 | +---------------------+
And you can specify multiple units at the same time. For example, you can specify hours and minutes. Like this.
SELECT DATE_SUB('2021-05-07 10:00:00', INTERVAL '1:30' HOUR_MINUTE) AS Result;
Result:
+---------------------+ | Result | +---------------------+ | 2021-05-07 08:30:00 | +---------------------+
Expected Values
The following table shows the valid unit values and their expected format.
unit Value |
Expected expr Format |
---|---|
MICROSECOND | MICROSECONDS |
SECOND | SECONDS |
MINUTE | MINUTES |
HOUR | HOURS |
DAY | DAYS |
WEEK | WEEKS |
MONTH | MONTHS |
QUARTER | QUARTERS |
YEAR | YEARS |
SECOND_MICROSECOND | ‘SECONDS.MICROSECONDS’ |
MINUTE_MICROSECOND | ‘MINUTES:SECONDS.MICROSECONDS’ |
MINUTE_SECOND | ‘MINUTES:SECONDS’ |
HOUR_MICROSECOND | ‘HOURS:MINUTES:SECONDS.MICROSECONDS’ |
HOUR_SECOND | ‘HOURS:MINUTES:SECONDS’ |
HOUR_MINUTE | ‘HOURS:MINUTES’ |
DAY_MICROSECOND | ‘DAYS HOURS:MINUTES:SECONDS.MICROSECONDS’ |
DAY_SECOND | ‘DAYS HOURS:MINUTES:SECONDS’ |
DAY_MINUTE | ‘DAYS HOURS:MINUTES’ |
DAY_HOUR | ‘DAYS HOURS’ |
YEAR_MONTH | ‘YEARS-MONTHS’ |
You can also use the SUBDATE()
function to do the same thing (it’s a synonym for the DATE_SUB()
function when using the same syntax).
In addition, the syntax of SUBDATE()
has a second form, which is a shorthand method of subtracting a certain number of days from a date. For more info, see SUBDATE() Examples in MySQL.