简单问题最‘要命’之MySQL生成连续的数字或者日期(2020-09-02)

本文详细介绍了如何在MySQL中生成连续的数字序列,包括0-24甚至更长序列的生成方法。通过巧妙利用SQL的内外循环特性,结合变量自增实现,适用于时间段处理等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题来源

今天和同事一起讨论MySQL的相关语句以及性能问题,突然被问到如何使用MySQL语句输出0-5的连续数字。
回答:这太简单了,直接上代码:

SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5

然后同事又问那要是生成0-24 或者0-1000的数据呢?
回答就是:鹅鹅鹅鹅鹅鹅饿…

程序员的任务就是活到老,学到老!!

经过百度还有其他途径终于得到了一定的解决方案,还是乖乖写下笔记【心里想。。被这个难住了】

首先我们先生成一个1-24的连续数据,方便做一个每日的时间段处理:

SELECT @xi:=@xi+1 as xc from 
			(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 ) xc1, 
			(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6) xc2,  
			(SELECT @xi:=0) xc0 

运行结果如下:
在这里插入图片描述
讲解:其实学过一些编程的童鞋都对内外循环有所了解,那么其实在sql中我们也是可以这样理解的,不要忘了sql也是一门语言哦
首先sql中是通过@加一个参数来声明变量的:【SELECT @xi:=0】 比如这个就是声明了一个变量为0,那之后我们需要做的就是循环,在此之前先写一段Python代码,方便和之后这个更好的理解

for i in range(1,5):
    for j in range(1,7):
        print(j)

输出结果:就是4次1,2,3,4,5,6
在这里插入图片描述
相当于外层执行4次,每次有执行内循环6次,即4*6=24次。好那话不多说我们进入正题

(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 ) xc1, 
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6) xc2,    

我们可以把这个就可以理解为内外两层循环,xc1为外循环,xc2是内循环,说白了就是共执行4次,每次执行6个,这样就可以实现4*6=24的效果了。

SELECT @xi:=@xi+1 as xc from  ****


			(SELECT @xi:=0) xc0 

这句话的意思就是声明一个变量x为0,让他每次加1,所以输出1-24这几个数字。其实想想也很简单,就是想不到。

如果想生成连续的时间可以这样操作:
SELECT DATE_FORMAT(DATE_SUB(NOW(), INTERVAL xc MONTH), '%Y-%m') as date
FROM ( 
			SELECT @xi:=@xi+1 as xc from 
			(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 ) xc1, 
			(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6) xc2,  
			(SELECT @xi:=0) xc0 
) xcxc

生成最近的24个月的日期,其他的自己可以模仿的书写。

【注意】:在oracle可以直接根据rownub生成,mysql麻烦一些,需要自定义变量,有机会可以多学习一下Oracle,有时候小的问题才最致命!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值