MYSQL生成日期列表
短信预约 -IT技能 免费直播动态提醒
今天工作过程中,遇到了一个需要生成一个日期序列作为主表的需求。
方法一
以前的做法是通过借助于辅助表来实现,意思是说,生成一个整数序列1~N(N至少要大于所需序列的最大长度),并在数据库中创建这个表。然后结合DATE_ADD函数来实现就行。步骤如下:
- 创建一个表T_INT,创建一列INT_FIELD,数据类型为INT,存入数据0~10000,这里假设我们需要的序列长度不会超过10000.
- 然后,编写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后的终止条件。
来源地址:https://blog.csdn.net/hpuexplorer/article/details/130250734
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341