Get the first and last date of next month in MySQL

匿名 (未验证) 提交于 2019-12-03 02:13:02

问题:

How can I get the first and last day of next month to be used in the where clause?

回答1:

Use:

SELECT  DATE_SUB(     LAST_DAY(         DATE_ADD(NOW(), INTERVAL 1 MONTH)     ),      INTERVAL DAY(         LAST_DAY(             DATE_ADD(NOW(), INTERVAL 1 MONTH)         )     )-1 DAY ) AS firstOfNextMonth,  LAST_DAY(     DATE_ADD(NOW(), INTERVAL 1 MONTH) )AS lastOfNextMonth 


回答2:

For the last day of next month, you can use the LAST_DAY() function:

SELECT LAST_DAY(DATE_ADD(CURDATE(), INTERVAL 1 MONTH)); +-------------------------------------------------+ | LAST_DAY(DATE_ADD(CURDATE(), INTERVAL 1 MONTH)) | +-------------------------------------------------+ | 2010-07-31                                      | +-------------------------------------------------+ 1 row in set (0.00 sec) 

Some tested edge cases:

SELECT LAST_DAY(DATE_ADD('2010-01-31', INTERVAL 1 MONTH)); +----------------------------------------------------+ | LAST_DAY(DATE_ADD('2010-01-31', INTERVAL 1 MONTH)) | +----------------------------------------------------+ | 2010-02-28                                         | +----------------------------------------------------+ 1 row in set (0.00 sec)  SELECT LAST_DAY(DATE_ADD('2010-02-28', INTERVAL 1 MONTH)); +----------------------------------------------------+ | LAST_DAY(DATE_ADD('2010-02-28', INTERVAL 1 MONTH)) | +----------------------------------------------------+ | 2010-03-31                                         | +----------------------------------------------------+ 1 row in set (0.00 sec)  SELECT LAST_DAY(DATE_ADD('2010-08-31', INTERVAL 1 MONTH)); +----------------------------------------------------+ | LAST_DAY(DATE_ADD('2010-08-31', INTERVAL 1 MONTH)) | +----------------------------------------------------+ | 2010-09-30                                         | +----------------------------------------------------+ 1 row in set (0.00 sec) 

There is also a tricky use of the DATE_FORMAT() function to get the first day of a month. You can use it as follows:

SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01'); +---------------------------------------------------------------+ | DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH),'%Y-%m-01') | +---------------------------------------------------------------+ | 2010-07-01                                                    | +---------------------------------------------------------------+ 1 row in set (0.00 sec) 

Therefore:

SELECT   DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01') AS             FirstDayOfNextMonth,          LAST_DAY(DATE_ADD(CURDATE(), INTERVAL 1 MONTH)) AS             LastDayOfNextMonth;  +---------------------+--------------------+ | FirstDayOfNextMonth | LastDayOfNextMonth | +---------------------+--------------------+ | 2010-07-01          | 2010-07-31         | +---------------------+--------------------+ 1 row in set (0.00 sec) 


回答3:

First day of next month is simply last day of this month + 1:

select adddate(last_day(curdate()), 1) 

Last day of next month is simply last day of (today + 1 month):

select last_day(curdate() + interval 1 month)) 

These are the most straightforward solutions. You'll not be able to find a shorter one.


If you need the first day of the current month, see https://stackoverflow.com/a/28966866/632951



回答4:

# FIRST date of next month select date_sub(date_add(curdate(), interval 1 month), interval day(curdate())-1 day);  # LAST date of next month select date_sub(date_add(curdate(), interval 2 month), interval day(curdate()) day); 

not sure that's the shortest queries, but they do work



回答5:

As @DanielVassallo explained it, retrieving the last day of next month is easy:

SELECT LAST_DAY(DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH)); 

To retrieve the first day, you could first define a custom FIRST_DAY function (unfortunately MySQL does not provide any):

DELIMITER ;; CREATE FUNCTION FIRST_DAY(day DATE) RETURNS DATE DETERMINISTIC BEGIN   RETURN ADDDATE(LAST_DAY(SUBDATE(day, INTERVAL 1 MONTH)), 1); END;; DELIMITER ; 

And then you could do:

SELECT FIRST_DAY(DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH)); 


回答6:

Here is all Possible solutions. Hope this will help ... Just Run this to get All details

SELECT     DATE_SUB(DATE_FORMAT(NOW(),'%Y-%m-%d'),INTERVAL 1 DAY) AS GetLastDay,    DATE_FORMAT(NOW(),'%Y-%m-%d') AS GetTodaysDate,   DATE_ADD(DATE_FORMAT(NOW(),'%Y-%m-%d'),INTERVAL 7 DAY) AS Add7DaysFromTodaysDate,   DATE_SUB(DATE_FORMAT(NOW(),'%Y-%m-%d'),INTERVAL 7 DAY) AS Substract7DaysFromTodaysDate,   DATE_ADD(DATE_FORMAT(NOW(),'%Y-%m-%d'),INTERVAL 1 MONTH) AS Add1MonthFromTodaysDate,   DATE_FORMAT(NOW(),'%Y-%m-01') AS FirstDayCurrentMonth ,    LAST_DAY(DATE_FORMAT(NOW(),'%Y-%m-%d')) AS lastDayCurrentMonth,   DATE_SUB(LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH)),              INTERVAL DAY(LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH)))-1 DAY) AS FirstOfNextMont007,   LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH)) AS lastOfpREMonth,   DATE_SUB(LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH)),              INTERVAL DAY(LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH)))-1 DAY) AS FirstOfNextMonth,    LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH)) AS lastOfNextMonth 


回答7:

Shorter query:

SELECT ADDDATE(LAST_DAY(NOW()), 1) AS firstOfNextMonth, LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH)) AS lastOfNextMonth 


回答8:

In postgresql you have perfect date truncation functions.

For MySQL, I found a discussion here which might give some ideas.



回答9:

select Convert(varchar(10),DateAdd(Day, 1, getdate() - Day(getdate()) + 1) -1,105)  select Convert(varchar(10),getdate(),105)  select year(getdate()) 


回答10:

To get first date of next month :-select LAST_DAY(NOW()) + INTERVAL 1 DAY

To get last date of next month :-select LAST_DAY(NOW()+ INTERVAL 1 Month)



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!