SQL實現按照年月查詢每天的日期

使用數據庫MySQL

應用場景:通過年月查詢出這個月每一天的日期,特別是在報表開發時可以用到,用於顯示每天的情況,按月查詢

一、梳理思路

1、要按月輸出所有的日期,我們就要知道每一天的號數,現在我們要知道每個月最大有31天,我們需要有這樣的數據集合;

SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4 UNION ALL
SELECT 5 UNION ALL
SELECT 6 UNION ALL
SELECT 7 UNION ALL
SELECT 8 UNION ALL
SELECT 9 UNION ALL
SELECT 10 UNION ALL
SELECT 11 UNION ALL
SELECT 12 UNION ALL
SELECT 13 UNION ALL
SELECT 14 UNION ALL
SELECT 15 UNION ALL
SELECT 16 UNION ALL
SELECT 17 UNION ALL
SELECT 18 UNION ALL
SELECT 19 UNION ALL
SELECT 20 UNION ALL
SELECT 21 UNION ALL
SELECT 22 UNION ALL
SELECT 23 UNION ALL
SELECT 24 UNION ALL
SELECT 25 UNION ALL
SELECT 26 UNION ALL
SELECT 27 UNION ALL
SELECT 28 UNION ALL
SELECT 29 UNION ALL
SELECT 30 UNION ALL
SELECT 31 

2、我們要知道每個月有多少天,這樣我們就可以控制取的號數了,取的號數是小於等於這個最大號數的;

SELECT DAY ( LAST_DAY( STR_TO_DATE( '2019-10', '%Y-%m' ) ) )

3、當我們知道了上面的兩個部分的值,我們就可以這樣計算了;
循環取第一個號數的數據集合,數據集合的值小於等於最大號數的值,這個集合就是這個集合的所有號數,我們再去將號數和年月拼接打印就是完整的年月日集合了;

二、完整SQL

SELECT DATE_FORMAT( ADDDATE( Y.YEARMONTH, X.D - 1 ), '%Y-%m-%d' ) NEWDATE
FROM
(SELECT 1 AS D UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4 UNION ALL
SELECT 5 UNION ALL
SELECT 6 UNION ALL
SELECT 7 UNION ALL
SELECT 8 UNION ALL
SELECT 9 UNION ALL
SELECT 10 UNION ALL
SELECT 11 UNION ALL
SELECT 12 UNION ALL
SELECT 13 UNION ALL
SELECT 14 UNION ALL
SELECT 15 UNION ALL
SELECT 16 UNION ALL
SELECT 17 UNION ALL
SELECT 18 UNION ALL
SELECT 19 UNION ALL
SELECT 20 UNION ALL
SELECT 21 UNION ALL
SELECT 22 UNION ALL
SELECT 23 UNION ALL
SELECT 24 UNION ALL
SELECT 25 UNION ALL
SELECT 26 UNION ALL
SELECT 27 UNION ALL
SELECT 28 UNION ALL
SELECT 29 UNION ALL
SELECT 30 UNION ALL
SELECT 31 ) X
,(SELECT CONCAT( '2019-10', '-01' ) AS YEARMONTH , DAY ( LAST_DAY( STR_TO_DATE( '2019-10', '%Y-%m' ) ) ) AS LAST) Y
WHERE X.D <= Y.LAST

查詢結果如下:
在這裏插入圖片描述


到這裏就完成了按月份週期性查詢日期的操作了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章