如何在where子句中使用下個月的第一天和最後一天?在MySQL中獲取下個月的第一個和最後一個日期
回答
用途:
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
# 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);
不知道這是最短的查詢,但他們做的工作
這個解決方案與Ponies的解決方案相比性能如何? – Pacerier 2015-03-03 23:27:05
下個月的最後一天,你可以使用LAST_DAY()
功能:
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)
了一些測試的邊緣情況:
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)
還有一個使用DATE_FORMAT()
函數的技巧t o獲得一個月的第一天。您可以按如下方式使用它:
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)
因此:
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)
@Daneil,DATE_FORMAT會爲您返回一個'var_string',而不是一個日期。改用我的解決方案。 – Pacerier 2015-03-10 15:07:42
select Convert(varchar(10),DateAdd(Day, 1, getdate() - Day(getdate()) + 1) -1,105)
select Convert(varchar(10),getdate(),105)
select year(getdate())
我認爲你的答案是SQL Server;)。 – 2015-05-14 08:19:36
以下是所有可能的解決方案。希望這將幫助......只要運行它來獲取所有的細節
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
由於@DanielVassallo解釋它,檢索下個月的最後一天是容易的:
SELECT LAST_DAY(DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH));
要檢索的第一天,你可以先定義一個定製FIRST_DAY
功能(不幸的是MySQL不提供任何):
DELIMITER ;;
CREATE FUNCTION FIRST_DAY(day DATE)
RETURNS DATE DETERMINISTIC
BEGIN
RETURN ADDDATE(LAST_DAY(SUBDATE(day, INTERVAL 1 MONTH)), 1);
END;;
DELIMITER ;
然後,你可以這樣做:
SELECT FIRST_DAY(DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH));
我們不能簡單地寫(last_day(current_date()+ interval 1 month))嗎? – 2014-06-05 18:47:28
@UncleIroh,是的,我們可以,那也可以。但實際上有一個**更短的**解決方案:http://stackoverflow.com/a/28844641/632951 – Pacerier 2015-03-10 15:21:12
縮短查詢:
SELECT
ADDDATE(LAST_DAY(NOW()), 1) AS firstOfNextMonth,
LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH)) AS lastOfNextMonth
['curdate'比較好](http://stackoverflow.com/a/28844641/632951)現在'在速度和意圖傳輸方面。另外,就可讀性和命令長度而言,「+」優於「DATE_ADD」。 – Pacerier 2015-03-10 15:19:35
下個月的第一天簡直是這個月的最後一天+ 1:
select adddate(last_day(curdate()), 1)
最後一天下月僅僅是最後當天(今天+ 1個月):
select last_day(curdate() + interval 1 month))
這些是最直接的解決方案。你將無法找到更短的一個。
如果需要當前個月的第一天,看到https://stackoverflow.com/a/28966866/632951
爲了得到下個月的第一天: - select LAST_DAY(NOW()) + INTERVAL 1 DAY
要獲得下個月的最後一天: - select LAST_DAY(NOW()+ INTERVAL 1 Month)
- 1. 獲取指定日期的月份的第一個和最後一個日期
- 2. 在一個月內獲取第一個和最後一個日期
- 3. 設置10個月的第一個和最後一個日期
- 4. 傳遞日期並獲得該月的第一個和最後一個日期?
- 5. 如何獲取ios中fscalender的第一個日期和最後一個日期?
- 6. 獲取上個月的第一天和最後一天的日期在C#
- 7. 在PHP中抓取特定月份的第一個日期和最後日期
- 8. 獲取月份的第一個星期一和最後一個星期日,穿過月份邊界
- 9. 在PHP中,有沒有簡單的方法來獲取一個月的第一個和最後一個日期?
- 10. MySQL從日期列中獲取每個月的最後日期
- 11. 如何獲取上個月的第一個日期和最後一個日期? (Java)
- 12. 獲取特定日期的第一個和最後一個日期
- 13. 如何使用當前月份和年份在scala上獲取第一個日期和最後一個日期
- 14. 如何在一個月內找到第一個和最後一個日期
- 15. 使用T-SQL獲取下個月的第一個星期日
- 16. java獲取給定月份和給定年份的第一個日期和最後一個日期
- 17. 獲取本週的第一個/最後一個日期
- 18. 如何獲取每個月的第一個和最後一個月
- 19. 如何在excel中獲取本月的最後一個日期
- 20. 獲取上個月的最後一個日期Transact-SQL
- 21. 獲取每月的第一個和第三個星期一 - strtotime
- 22. 如何使用mysql獲取本月最後一個星期日的日期?
- 23. SQL Server 2005獲取任何一個月的第一個和最後一個日期
- 24. MySQL的獲取在一個月中日期的列表,一年
- 25. Mysql獲取分組的第一個和最後一個記錄
- 26. 使用NSCalendar - 獲取下一個月的第一個星期二
- 27. 獲取JSTL中下一個和上個月的第一天
- 28. 獲取最後一個Java日期/日曆的最後日期
- 29. MYSQL在一天之內的第一個和最後一個日期時間
- 30. Java獲取下個月的第一天給定日期
+1節省許多小時 – dakshbhatt21 2013-07-12 12:46:20
欲瞭解更多MySQL時間相關的功能,請參閱[本博文](http://sys-exit.blogspot.com/2013/06/mysql-today-tomorrow-yesterday- this.html) – ducin 2014-03-14 21:27:58
@OMGPonies,使用'curdate'而不是'now()',因爲我們不需要計時。此外,對於第一天,它更簡單[簡單地減去當前月份的天數](http://stackoverflow.com/a/28844641/632951)。它也更快,因爲我們只做一個'date_sub()'調用和一個'day()'調用。 – Pacerier 2015-03-04 00:32:09