MYSQL生成日期列表

今天工作过程中,遇到了一个需要生成一个日期序列作为主表的需求。
方法一
以前的做法是通过借助于辅助表来实现,意思是说,生成一个整数序列1~N(N至少要大于所需序列的最大长度),并在数据库中创建这个表。然后结合DATE_ADD函数来实现就行。步骤如下:

  1. 创建一个表T_INT,创建一列INT_FIELD,数据类型为INT,存入数据0~10000,这里假设我们需要的序列长度不会超过10000.
  2. 然后,编写SQL,就可以获得时间序列。SQL如下:
SELECT 
	DATE_ADD('2023-02-05', INTERVAL INT_FIELD DAY)
FROM T_INT WHERE DATE_ADD('2023-02-05', INTERVAL INT_FIELD DAY)<='2023-03-02'

这样,我们就获得了从2023年2月5日到2023年3月2日的一个时间序列。

方法二
今天刚刚学习了一种新的方式,借助于MYSQL8的递归函数,不用建立物理表就可以实现。SQL如下

 WITH RECURSIVE DATE_LIST (DATES) AS (      	
 	SELECT DATE('2023-02-05')  AS DATES   	
 	UNION ALL       	
 	SELECT DATE_ADD(DATES, INTERVAL 1 DAY) 	
 	FROM DATE_LIST WHERE DATE_ADD(DATES, INTERVAL 1 DAY) < '2023-03-02'  
 )   
 	SELECT  DATES FROM DATE_LIST

在RECURSIVE定义的递归下,UNION ALL前面的部分相当于初始化递归函数。UNIONALL后面的部分实现递归调用,直到达到WHERE后的终止条件。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值