
- Learn MySQL
- MySQL - Home
- MySQL - Introduction
- MySQL - Installation
- MySQL - Administration
- MySQL - PHP Syntax
- MySQL - Connection
- MySQL - Create Database
- MySQL - Drop Database
- MySQL - Select Database
- MySQL - Data Types
- MySQL - Create Tables
- MySQL - Drop Tables
- MySQL - Insert Query
- MySQL - Select Query
- MySQL - Where Clause
- MySQL - Update Query
- MySQL - Delete Query
- MySQL - Like Clause
- MySQL - Sorting Results
- MySQL - Using Join
- MySQL - NULL Values
- MySQL - Regexps
- MySQL - Transactions
- MySQL - Alter Command
- MySQL - Indexes
- MySQL - Temporary Tables
- MySQL - Clone Tables
- MySQL - Database Info
- MySQL - Using Sequences
- MySQL - Handling Duplicates
- MySQL - SQL Injection
- MySQL - Database Export
- MySQL - Database Import
MySQL - DATE_SUB() Function
The DATE, DATETIME and TIMESTAMP datatypes in MySQL are used to store the date, date and time, time stamp values respectively. Where a time stamp is a numerical value representing the number of milliseconds from '1970-01-01 00:00:01' UTC (epoch) to the specified time. MySQL provides a set of functions to manipulate these values.
The MYSQL DATE_SUB() function is used to subtracts the specified interval to a date value.
Syntax
Following is the syntax of the above function –
DATE_SUB(date, INTERVAL expr unit);
where,
date is the value representing the date it can be of the type String, DATE (YEAR, MONTH, and DAY), DATETIME (HOURS, MINUTES or, SECONDS) or, TIMESTAMP.
expr is the value representing the interval value.
unit is the interval type represented by the expr value which can be DAY, WEEK, MONTH, QUARTER, YEAR, HOUR, MINUTE, SECOND, MICROSECOND.
The unit can be mixed values as − SECOND_MICROSECOND, MINUTE_MICROSECOND, MINUTE_SECOND, HOUR_MICROSECOND, HOUR_SECOND, HOUR_MINUTE, DAY_MICROSECOND, DAY_SECOND, DAY_MINUTE, DAY_HOUR, YEAR_MONTH.
Example 1
Following example demonstrates the usage of the DATE_SUB() function –
mysql> SELECT DATE_SUB('2015-09-05', INTERVAL 20 DAY); +-----------------------------------------+ | DATE_SUB('2015-09-05', INTERVAL 20 DAY) | +-----------------------------------------+ | 2015-08-16 | +-----------------------------------------+ 1 row in set (0.00 sec)
Example 2
Following is another example of this function –
mysql> SELECT DATE_SUB('2008-01-02', INTERVAL 4 YEAR); +-----------------------------------------+ | DATE_SUB('2008-01-02', INTERVAL 4 YEAR) | +-----------------------------------------+ | 2004-01-02 | +-----------------------------------------+ 1 row in set (0.00 sec)
Example 3
In the following example we are passing DATETIME value for date –
mysql> SELECT DATE_SUB('2018-05-23 20:40:32.88558', INTERVAL 3 WEEK); +--------------------------------------------------------+ | DATE_SUB('2018-05-23 20:40:32.88558', INTERVAL 3 WEEK) | +--------------------------------------------------------+ | 2018-05-02 20:40:32.885580 | +--------------------------------------------------------+ 1 row in set (0.00 sec)
Example 4
We can also pass negative values as arguments to this function –
mysql> SELECT DATE_SUB('2015-09-05', INTERVAL -20 DAY); +------------------------------------------+ | DATE_SUB('2015-09-05', INTERVAL -20 DAY) | +------------------------------------------+ | 2015-09-25 | +------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT DATE_SUB('1995-11-15', INTERVAL -3355 WEEK); +---------------------------------------------+ | DATE_SUB('1995-11-15', INTERVAL -3355 WEEK) | +---------------------------------------------+ | 2060-03-03 | +---------------------------------------------+ 1 row in set (0.00 sec)
Example 5
You can also pass the column name as an argument to this function. Let us create a table with name MyPlayers in MySQL database using CREATE statement as shown below –
mysql>CREATE TABLE MyPlayers( ID INT, First_Name VARCHAR(255), Last_Name VARCHAR(255), Date_Of_Birth date, Place_Of_Birth VARCHAR(255), Country VARCHAR(255), PRIMARY KEY (ID) );
Now, we will insert 7 records in MyPlayers table using INSERT statements −
mysql> insert into MyPlayers values(1, 'Shikhar', 'Dhawan', DATE('1981-12-05'), 'Delhi', 'India'); mysql> insert into MyPlayers values(2, 'Jonathan', 'Trott', DATE('1981-04-22'), 'CapeTown', 'SouthAfrica'); mysql> insert into MyPlayers values(3, 'Kumara', 'Sangakkara', DATE('1977-10-27'), 'Matale', 'Srilanka'); mysql> insert into MyPlayers values(4, 'Virat', 'Kohli', DATE('1988-11-05'), 'Delhi', 'India'); mysql> insert into MyPlayers values(5, 'Rohit', 'Sharma', DATE('1987-04-30'), 'Nagpur', 'India'); mysql> insert into MyPlayers values(6, 'Ravindra', 'Jadeja', DATE('1988-12-06'), 'Nagpur', 'India'); mysql> insert into MyPlayers values(7, 'James', 'Anderson', DATE('1982-06-30'), 'Burnley', 'England');
Following query subtracts 14 years to the entities of the Date_Of_Birth column —
mysql> SELECT First_Name, Last_Name, Date_Of_Birth, Country, DATE_SUB(Date_Of_Birth, INTERVAL 14 YEAR) FROM MyPlayers; +------------+------------+---------------+-------------+-------------------------------------------+ | First_Name | Last_Name | Date_Of_Birth | Country | DATE_SUB(Date_Of_Birth, INTERVAL 14 YEAR) | +------------+------------+---------------+-------------+-------------------------------------------+ | Shikhar | Dhawan | 1981-12-05 | India | 1967-12-05 | | Jonathan | Trott | 1981-04-22 | SouthAfrica | 1967-04-22 | | Kumara | Sangakkara | 1977-10-27 | Srilanka | 1963-10-27 | | Virat | Kohli | 1988-11-05 | India | 1974-11-05 | | Rohit | Sharma | 1987-04-30 | India | 1973-04-30 | | Ravindra| Jadeja | 1988-12-06 | India | 1974-12-06 | | James | Anderson | 1982-06-30 | England | 1968-06-30 | +------------+------------+---------------+-------------+-------------------------------------------+ 7 rows in set (0.00 sec)
Example 6
Let us create another table with name Sales in MySQL database using CREATE statement as follows –
mysql> CREATE TABLE sales( ID INT, ProductName VARCHAR(255), CustomerName VARCHAR(255), DispatchDate date, DispatchTime time, Price INT, Location VARCHAR(255) ); Query OK, 0 rows affected (2.22 sec)
Now, we will insert 5 records in Sales table using INSERT statements −
insert into sales values (1, 'Key-Board', 'Raja', DATE('2019-09-01'), TIME('11:00:00'), 7000, 'Hyderabad'); insert into sales values (2, 'Earphones', 'Roja', DATE('2019-05-01'), TIME('11:00:00'), 2000, 'Vishakhapatnam'); insert into sales values (3, 'Mouse', 'Puja', DATE('2019-03-01'), TIME('10:59:59'), 3000, 'Vijayawada'); insert into sales values (4, 'Mobile', 'Vanaja', DATE('2019-03-01'), TIME('10:10:52'), 9000, 'Chennai'); insert into sales values (5, 'Headset', 'Jalaja', DATE('2019-04-06'), TIME('11:08:59'), 6000, 'Goa');
Following query subtracts 25 QUARTER to the entities of the DispatchDate column —
mysql> SELECT ProductName, CustomerName, DispatchDate, Price, DATE_SUB(DispatchDate, INTERVAL -25 QUARTER) FROM sales; +-------------+--------------+--------------+-------+----------------------------------------------+ | ProductName | CustomerName | DispatchDate | Price | DATE_SUB(DispatchDate, INTERVAL -25 QUARTER) | +-------------+--------------+--------------+-------+----------------------------------------------+ | Key-Board | Raja | 2019-09-01 | 7000 | 2025-12-01 | | Earphones | Roja | 2019-05-01 | 2000 | 2025-08-01 | | Mouse | Puja | 2019-03-01 | 3000 | 2025-06-01 | | Mobile | Vanaja | 2019-03-01 | 9000 | 2025-06-01 | | Headset | Jalaja | 2019-04-06 | 6000 | 2025-07-06 | +-------------+--------------+--------------+-------+----------------------------------------------+ 5 rows in set (0.00 sec)
Example 7
Suppose we have created a table named dispatches_data with 5 records in it using the following queries –
mysql> CREATE TABLE dispatches_data( ProductName VARCHAR(255), CustomerName VARCHAR(255), DispatchTimeStamp timestamp, Price INT, Location VARCHAR(255) ); insert into dispatches_data values('Key-Board', 'Raja', TIMESTAMP('2019-05-04', '15:02:45'), 7000, 'Hyderabad'); insert into dispatches_data values('Earphones', 'Roja', TIMESTAMP('2019-06-26', '14:13:12'), 2000, 'Vishakhapatnam'); insert into dispatches_data values('Mouse', 'Puja', TIMESTAMP('2019-12-07', '07:50:37'), 3000, 'Vijayawada'); insert into dispatches_data values('Mobile', 'Vanaja' , TIMESTAMP ('2018-03-21', '16:00:45'), 9000, 'Chennai'); insert into dispatches_data values('Headset', 'Jalaja' , TIMESTAMP('2018-12-30', '10:49:27'), 6000, 'Goa');
Following query subtracts 365 days to the dates of the DispatchTimeStamp column —
mysql> SELECT ProductName, CustomerName, DispatchTimeStamp, Price, DATE_SUB(DispatchTimeStamp, INTERVAL 365 DAY) FROM dispatches_data; +-------------+--------------+---------------------+-------+-----------------------------------------------+ | ProductName | CustomerName | DispatchTimeStamp | Price | DATE_SUB(DispatchTimeStamp, INTERVAL 365 DAY) | +-------------+--------------+---------------------+-------+-----------------------------------------------+ | Key-Board | Raja | 2019-05-04 15:02:45 | 7000 | 2018-05-04 15:02:45 | | Earphones | Roja | 2019-06-26 14:13:12 | 2000 | 2018-06-26 14:13:12 | | Mouse | Puja | 2019-12-07 07:50:37 | 3000 | 2018-12-07 07:50:37 | | Mobile | Vanaja | 2018-03-21 16:00:45 | 9000 | 2017-03-21 16:00:45 | | Headset | Jalaja | 2018-12-30 10:49:27 | 6000 | 2017-12-30 10:49:27 | +-------------+--------------+---------------------+-------+-----------------------------------------------+ 5 rows in set (0.00 sec)
Example 8
Following example demonstrates the usage of various units available in the DATE_SUB() function –
mysql> SELECT DATE_SUB('2021-03-22', INTERVAL '5-6 ' YEAR_MONTH ); +-----------------------------------------------------+ | DATE_SUB('2021-03-22', INTERVAL '5-6 ' YEAR_MONTH ) | +-----------------------------------------------------+ | 2015-09-22 | +-----------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT DATE_SUB('2021-03-22', INTERVAL '3' WEEK ); +--------------------------------------------+ | DATE_SUB('2021-03-22', INTERVAL '3' WEEK ) | +--------------------------------------------+ | 2021-03-01 | +--------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT DATE_SUB('2021-03-22', INTERVAL '3' QUARTER ); +-----------------------------------------------+ | DATE_SUB('2021-03-22', INTERVAL '3' QUARTER ) | +-----------------------------------------------+ | 2020-06-22 | +-----------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT DATE_SUB('2021-03-22', INTERVAL '10:09.2362191' MINUTE_MICROSECOND); +---------------------------------------------------------------------+ | DATE_SUB('2021-03-22', INTERVAL '10:09.2362191' MINUTE_MICROSECOND) | +---------------------------------------------------------------------+ | 2021-03-21 23:49:48.637809 | +---------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT DATE_SUB('2021-03-22', INTERVAL '10.2362191' SECOND_MICROSECOND); +------------------------------------------------------------------+ | DATE_SUB('2021-03-22', INTERVAL '10.2362191' SECOND_MICROSECOND) | +------------------------------------------------------------------+ | 2021-03-21 23:59:47.637809 | +------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT DATE_SUB('2021-03-22', INTERVAL '10.21' MINUTE_SECOND); +--------------------------------------------------------+ | DATE_SUB('2021-03-22', INTERVAL '10.21' MINUTE_SECOND) | +--------------------------------------------------------+ | 2021-03-21 23:49:39 | +--------------------------------------------------------+ 1 row in set (0.00 sec)