如何才能在MySQL中編寫語句以返回上一季度的上一個開始和結束日期?假設我想在這一季之前的季度的開始和結束日期(即去年十月開始和去年十二月底)。在MySQL中返回上一季度的開始和結束日期
回答
試試這個:
SELECT
MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL QUARTER(CURDATE())-1 QUARTER - INTERVAL 1 DAY,
MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL QUARTER(CURDATE())-2 QUARTER
謝謝,這個工程。 – Blobert 2015-03-19 03:11:05
@Blobert,沒問題,很高興我能幫到你。 – 2015-03-19 03:12:57
開始和季度末是固定的,所以沒有必要實際上是「計算」的 - 我們知道他們是1月1日,4月1日,等, 3月31日,6月30日等。
所以我們留下的所有東西都是在固定的日期之前得到正確的年份 - 如果當前季度是Q1,則返回一年,否則使用當前年份。
QUARTER(NOW())
會給我們當前季度(1〜4),所以這可能是如此簡單:
SELECT
CASE QUARTER(NOW())
WHEN 1 THEN DATE_FORMAT(NOW() - INTERVAL 1 YEAR, '%Y-10-01')
WHEN 2 THEN DATE_FORMAT(NOW(), '%Y-01-01')
WHEN 3 THEN DATE_FORMAT(NOW(), '%Y-04-01')
WHEN 4 THEN DATE_FORMAT(NOW(), '%Y-07-01')
END AS previous_quarter_begin,
CASE QUARTER(NOW())
WHEN 1 THEN DATE_FORMAT(NOW() - INTERVAL 1 YEAR, '%Y-12-31')
WHEN 2 THEN DATE_FORMAT(NOW(), '%Y-03-31')
WHEN 3 THEN DATE_FORMAT(NOW(), '%Y-06-30')
WHEN 4 THEN DATE_FORMAT(NOW(), '%Y-09-30')
END AS previous_quarter_end
http://sqlfiddle.com/#!9/9eecb/1858
如果你想在一個不同的格式的日期,說mm/dd/yyyy,那麼你可以簡單地改變指定的格式爲10/01/%Y
等
(如果你想測試這個,看看它是否實際上正常工作的不同日期,那麼你可以替換每個在一個固定的日期上述查詢的NOW()
發生,好比說'2015-12-22'
,看看這會給在12月的日期預期的結果。)
感謝您的回答。稍微複雜一點,但我會仔細看看。我相信它將在未來有用。 – Blobert 2015-03-19 03:11:58
我發現它有助於使用該TRUNC_QUARTER
存儲功能。它會在日曆季度的第一天將任何日期或日期/時間值轉換爲午夜。然後你可以使用INTERVAL
算術來操縱它。
DELIMITER $$
DROP FUNCTION IF EXISTS TRUNC_QUARTER$$
CREATE
FUNCTION TRUNC_QUARTER(datestamp DATETIME)
RETURNS DATE DETERMINISTIC NO SQL
COMMENT 'returns preceding first of the quarter'
RETURN DATE(CONCAT(YEAR(datestamp),'-', 1 + 3*(QUARTER(datestamp)-1),'-01'))$$
DELIMITER ;
有了它,你可以這樣寫:
SELECT TRUNC_QUARTER(CURDATE()) - INTERVAL 1 QUARTER start_last_quarter,
TRUNC_QUARTER(CURDATE()) - INTERVAL 1 DAY end_last_quarter
- 1. MySQL獲取季度的開始和結束日期按季度
- 2. 計算本季度和上個季度的開始日期和結束日期
- 3. 返回包含開始日期和結束日期的月數
- 4. 如何獲取當前季度的開始日期和結束日期..?
- 5. 開始日期和結束日期datepicker
- 6. 在開始/結束日期
- 7. 開始日期和結束日期之間的一個季度日期字符串
- 8. 返回打破了班級開始和結束日期之間
- 9. 轉換的開始日期爲datetime的日期和結束日期的開始到結束的一天
- 10. glyphicon日曆開始和結束日期
- 11. SSRS默認開始/結束日期返回一段特定日期的
- 12. 獲取有關給定開始和結束日期的季度數據
- 13. 如何獲得特定年份的每個季度的確切開始日期和結束日期在Ruby中
- 14. 如何在Android中獲取開始日期和結束日期?
- 15. 總結連續的日期,開始和結束的塊日期
- 16. NHiberate Validator開始日期結束日期
- 17. 笨開始和結束日期驗證
- 18. datepicker - 限制開始和結束日期
- 19. SQL合併開始日期和結束
- 20. OPENQUERY開始和結束日期SQL
- 21. 檢查開始和結束日期
- 22. postgress:SQLQuery:每週開始和結束日期
- 23. SAS給定一個開始日期和結束日期我需要知道在開始日期和結束日期之後的每個30天的日期
- 24. Bootstrap中的開始日期和結束日期
- 25. 提取組中的開始日期和結束日期
- 26. jquery中的開始日期和結束日期
- 27. Android中本週開始和結束日期的日期爲
- 28. Actionscript中開始或結束的日期
- 29. 查詢日期根據開始日期和結束日期
- 30. 在angularjs中查看完整日曆中的開始日期和結束日期
任何你至今嘗試過? – CurseStacker 2015-03-19 02:48:04
我到目前爲止:'date_add(current_date(),INTERVAL'-1'QUARTER)',但它沒有做我想做的事,因爲它只是從當前日期中移除4個月。 – Blobert 2015-03-19 02:51:31