mysql生成连续的日期

本文详细解释了如何在SQL中使用递归公用表表达式(RecursiveCTE)来生成特定日期范围以及递归遍历树结构。通过WITHRECURSIVE关键字,作者展示了基础集和递归集的概念以及在MySQL中的应用实例。
摘要由CSDN通过智能技术生成

1.代码

例如:生成"2023-03-01"至"2023-03-10"之间的日期

WITH RECURSIVE date_range  AS (
    SELECT "2023-03-01" AS date FROM dual
    UNION ALL
		
    SELECT DATE_ADD(date, INTERVAL 1 DAY) date
    FROM date_range
    WHERE DATE_ADD(date, INTERVAL 1 DAY) <= "2023-03-10"
)
SELECT 
    date
FROM 
    date_range ;

生成结果:
在这里插入图片描述

2. 语法

在SQL中,RECURSIVE关键字并不直接接受参数,它是一个用于定义递归公用表表达式(Recursive Common Table Expression, CTE)的关键字。递归CTE通常包含两个部分:
1.基础集(Non-Recursive Part): 这是递归查询的初始或起始点,它不依赖于自身生成的结果。这个部分通常是单个SELECT语句。
2.递归集(Recursive Part): 这是递归查询的核心部分,它引用了前面已经计算出的结果,并结合新的数据行生成下一次迭代的数据。递归集通常通过UNION ALL、UNION(去除重复行)或者在某些数据库系统中支持的其他方式与基础集连接。
例如,在MySQL中的一个递归查询结构如下,递归遍历树结构:

WITH RECURSIVE hierarchy AS (
    SELECT id, parent_id, name, 1 as level
    FROM tree
    WHERE parent_id IS NULL -- 基础集:根节点

    UNION ALL

    SELECT child.id, child.parent_id, child.name, h.level + 1
    FROM tree AS child
    JOIN hierarchy AS h ON h.id = child.parent_id -- 递归集:基于前一次结果继续查询
)
SELECT * FROM hierarchy;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值