Professional Documents
Culture Documents
MySQL table
Syntax of DATE_SUB()
Example
Output is 2016-12-22
We have subtracted three days form the given date by using DATE_SUB() function. In place of DAY we can use Month, year,
hour, minute, second etc , here is the list.
unit Value Expected expr Format Example
To use the above Examples add SELECT at left and run the query.
The second query depends on the todays date, so your result will be different.
Some time we have to collect last 7 or 15 days or X days (or month, year or week) data from MySQL table.
Video Tutorial on Date Query using CURDATE, BETWEEN , YEAR, MONTH, DAYOFWEEK()
You may not get any record when searching for last 10 days record by using SQL dump of more than 10 days old. Use this
query to get the distribution of date from both sides of today's date.
For example let us find out who are the new members joined in our forum in last week. One shop may be interested in knowing
new products added in last one month. What are the books arrived in last one year. Here irrespective of the date values we
want the records of last X days from today, or we can say that the records between today and last X days ( month , year or
week) are required.
We will use the MySQL function CURDATE() (date-curdate.php) to get the today's date.
To get the difference in today date and previous day or month we have to use the MySQL function DATE_SUB
DATE_SUB is a MySQL function which takes date expression, the interval and the constant to return the date value for further
calculation.
Here are some sample queries on how to get the records as per requirements . �
The above query will return last 10 days records. Note that this query will return all future dates also. To exclude future dates
we have to modify the above command a little by using between query (sql_between.php) to get records. Here is the modified
one.
SELECT * FROM dt_table WHERE `date` BETWEEN DATE_SUB( CURDATE( ) ,INTERVAL 10 DAY ) AND CURDATE( )
Present Month Records
Starting from 1st day of the current month till now.
SELECT * FROM `dt_table` WHERE date between DATE_FORMAT(CURDATE() ,'%Y-%m-01') AND CURDATE()
SELECT * FROM `dt_table` WHERE date between DATE_FORMAT(CURDATE() ,'%Y-01-01') AND CURDATE()
Here also future records will be returned so we can take care of that by using BETWEEN (sql_between.php) commands if
required.
SELECT * FROM dt_table WHERE date BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 MONTH) AND CURDATE();
Using Year
select * from dt_table WHERE `date` >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)
SELECT * FROM dt_table WHERE date BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 YEAR) AND CURDATE();
AND
Note the difference between Last one month record and Previous month record
This query will return records between last three months. This query again we will modify to get the records between three
moths and six months.
SELECT * FROM dt_table WHERE `date` BETWEEN DATE_SUB( CURDATE( ) ,INTERVAL 6 MONTH ) AND DATE_SUB( CURDATE( ) ,
INTERVAL 3 MONTH )
Now let us change this to get records between 6 month and 12 month.
SELECT * FROM dt_table WHERE `date` BETWEEN DATE_SUB( CURDATE( ) ,INTERVAL 12 MONTH ) AND DATE_SUB( CURDATE( )
,INTERVAL 6 MONTH )
With this you can understand how the records between a month range or a year range can be collected from a table. Note that
the months ranges are calculated starting from current day. So if we are collecting records of last three months and we are in
15th day of 9th month then records of 15th day of 6th month we will get but the records of 14th day of 6th month will be
returning on next query that is between 3 months and 6 months.
AND
Example
MICROSECOND MICROSECONDS
SECOND SECONDS
MINUTE MINUTES
HOUR HOURS
SECOND_MICROSECOND 'SECONDS.
MICROSECONDS'
DATE_SUB( '2016-02-23 20:55:58', INTERVAL '1.543' SECOND_MICROSECOND )
MINUTE_MICROSECOND 'MINUTES:
SECONDS.
MICROSECONDS'
DATE_SUB
( '2016-02-23 20:55:58',
MINUTE_SECOND 'MINUTES:
SECONDS'
HOUR_MICROSECOND 'HOURS:MINUTES:
SECONDS.
MICROSECONDS'
HOUR_SECOND 'HOURS:MINUTES:
SECONDS'
HOUR_MINUTE 'HOURS:MINUTES'
DATE_SUB( '2016-02-23 20:55:52', INTERVAL '5:2' HOUR_MINUTE )
MINUTES:
SECONDS.
MICROSECONDS'
MINUTES:SECONDS'
MINUTES'
Our sample table dt_table_tm stores login date with time in a field along with one more column showing event_id.
In place of NOW() (date-now.php) we can use specific date and time ( timestamp ) Note : While using date use the format
YYYY-mm-dd ( YEAR - Month - date) and while using time use HH:MM:SS ( Hour : Minutes : Seconds )
SELECT * FROM `dt_table_tm` WHERE tm >= DATE_SUB( '2018-08-10 11:50:00', INTERVAL '2:18:33' HOUR_SECOND )
All logins between 9 and 10 hours ( from 9 and 10 both inclusive till it is not 11 )
All logins between two input times in hour : minutes : seconds on a perticular day
SELECT * FROM `dt_table_tm` WHERE date(tm)='2018-08-09' AND TIME(tm) BETWEEN TIME('9:00:00') AND TIME('10:15:0
0')
First Login ( tm ) of all days. We will use GROUP BY (sql_group_by.php) and MIN() (sql_min.php)
SELECT DATE(tm), MIN(tm),DATE_FORMAT(MIN(tm),'%H : %i :%s') time
First login of all days after a particular HOUR Minutes and seconds.
For the SQL with date and time , another table dt_table_tm is used and the dump file can be used .
SQL dump file generated based on date & time to test queries → (date-lastweek-dump.php)
(http://www.facebook.com/share.php?u=https://www.plus2net.com/sql_tutorial/date-lastweek.php)
Subscribe
* indicates required
Email Address *
First Name
Last Name
Subscribe to plus2net
Subscribe