问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

如何使用SQL语句生成一个月的日期列表

创作时间:
作者:
@小白创作中心

如何使用SQL语句生成一个月的日期列表

引用
CSDN
1.
https://blog.csdn.net/Ban_dan/article/details/138072454

在数据库开发中,有时我们需要生成一个月的日期列表。本文将介绍一种使用SQL语句直接生成指定月份日期列表的方法。

实现思路

  1. 生成连续的日期序列

    首先,使用SELECT子查询和DATE_ADD函数生成一个连续的日期序列,从指定月份的第一天开始。

    子查询中使用了三个UNION ALL,每个UNION ALL语句生成一个数字序列,从0到9,分别代表个位、十位和百位。通过三个CROSS JOIN进行笛卡尔积,组合成了0到999的数字序列。

    DATE_ADD函数用于在指定日期上添加指定的天数,这里用来生成从指定月份的第一天开始的日期序列。

  2. 限制日期范围

    使用WHERE子句限制生成的日期序列,确保日期不超过指定月份的最后一天。

  3. 按照日期排序

    使用ORDER BY对生成的日期序列按照日期排序。

SQL代码实现

SELECT dateList.date_range AS `monthDate`
FROM (
    SELECT DATE_ADD(CONCAT('2024-01', '-01'), INTERVAL n DAY) AS date_range
    FROM (
        SELECT a.N + b.N * 10 + c.N * 100 AS N
        FROM (
            SELECT 0 AS N
            UNION ALL 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
        ) a /*10*/
        CROSS JOIN (
            SELECT 0 AS N
            UNION ALL 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
        ) b /*100*/
        CROSS JOIN (
            SELECT 0 AS N
            UNION ALL 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
        ) c
        WHERE a.N + b.N * 10 + c.N * 100 <= DATEDIFF(LAST_DAY(STR_TO_DATE(CONCAT('2024-01', '-01'), '%Y-%m-%d')), CONCAT('2024-01', '-01'))
    ) days
    ORDER BY date_range
) dateList
ORDER BY dateList.date_range

使用说明

代码中2024-01部分可以替换为任意年月,以生成相应月份的所有日期。例如,将2024-01替换为2023-12,即可生成2023年12月的所有日期。

运行效果

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号