首页 > 数据库 >MySQL生成数字序列/日期序列

MySQL生成数字序列/日期序列

时间:2022-09-19 13:22:44浏览次数:103  
标签:10 nums UNION 生成 日期 MySQL 序列 SELECT


1. MySQL5.7基于自定义变量的方式

生成1-10的连续数字序列:

SELECT @v := @v + 1 AS n 
FROM
(SELECT 1 UNION SELECT 2) t1,
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) t2,
(SELECT @v := 0) t0

结果:

1
2
3
4
5
6
7
8
9
10

解释:
from后面,最后一个t0是设置一个初始值@v = 0,而t1t2的作用仅是利用SQL笛卡尔积的原理,生成10条记录,基于这10条记录,利用变量@v每次加一并更新自身,即可得到1-10的连续数字序列


基于这个方法,构建50以内的奇数序列 [1, 3, 5, ..., 47, 49]:

SELECT @v := @v + 2 AS n 
FROM
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) t1,
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) t2,
(SELECT @v := -1) t0

同理,构建最近30天的时间序列:

SELECT DATE_SUB(CURDATE(), INTERVAL n DAY) AS date 
FROM (
    SELECT @v := @v + 1 AS n from 
    (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) t1,
    (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6) t2,
    (SELECT @v := 0) t0
) t

2. MySQL8基于with递归的方式(CTE, Common Table Expressions)

生成1-10的连续数字序列:

WITH RECURSIVE cte (n) AS
(
    SELECT 1
    UNION ALL 
    SELECT n + 1 FROM cte WHERE n < 10
) 
SELECT n FROM cte

关于MySQL with 用法

结果:

1
2
3
4
5
6
7
8
9
10

3. 基于存储过程的方式

生成1-10的连续数字序列:

DROP TABLE IF EXISTS nums;
CREATE TABLE nums (n INT);

DELIMITER $$

CREATE PROCEDURE build_seq(IN max_n int)
BEGIN
  DECLARE n INT DEFAULT 1;
  WHILE n <= max_n DO
        INSERT INTO nums VALUES(n);
        SET n = n + 1;
    END WHILE;
END $$

DELEMITER ;

CALL build_seq(10);

会生成一张表nums,并生成数据保存在nums中,而不是临时表,结果如下示

SELECT * FROM nums;

1
2
3
4
5
6
7
8
9

标签:10,nums,UNION,生成,日期,MySQL,序列,SELECT
From: https://www.cnblogs.com/convict/p/16707382.html

相关文章

  • [Mysql]如何查看初次安装后的默认密码
    mysql初次安装时,会设置一个临时密码,不允许用空密码直接登录:ubuntu系统上这个密码的存放位置是/etc/mysql/debian.cnf......
  • mysql(5)函数
    函数是指一段可以直接被另一段程序调用的程序或代码字符串函数数值函数日期函数流程函数 ......
  • hutool日期获取总结
    //获取当前日期DateUtil.date()//今年最后时间DateUtil.endOfYear(DateUtil.date())//今天DateUtil.parse(DateUtil.date(),"yyyy-MM-dd")//获取当前时间字符串,yyyy-M......
  • Java8日期处理
    Java8推出了新的日期API序号类描述1Instant时间戳2Duration持续时间,时间差3LocalDate只包含日期,例如:2022-09-194LocalTime只包含时间,例如:10:......
  • MySql 表 转为C#实体类 ,sql语句
    装载自:https://www.cnblogs.com/noobprogrammer/p/15745382.html SELECT CONCAT( '///<summary>\r\n///', COLUMN_COMMENT, '\r\n///</summary>\r\npublic', CAS......
  • 十四、MySQL进阶
    (一)索引索引:数据库的性能调优;提升数据库的工作效率。1、索引分类(逻辑分类)1、主键索引:主键索引是一种唯一性索引,即不允许为空以及值重复2、唯一性索引:在创建表的时候加上......
  • MySql 类型转换(转载)
    1.值类型转换  select--数值->字符--char(n)n个长度的字符,超过截取convert(2022,char(3))c1,--202convert(2022,char(4))c2,......
  • 获取一个月内有的日期
    指定格式为“yyyy-MM-dd”以当前月的某一天为基础点击查看代码@Testpublicvoidtest4(){LocalDatestart=LocalDate.now().with(TemporalAdjuster......
  • MySQL事务以及存储引擎
    MySQL事务以及存储引擎一、事务1.事务的概念●事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即......
  • MySQL日志管理、备份与恢复
    MySQL日志管理、备份与恢复一、MySQL日志管理1.MySQL日志路径MySQL的日志默认保存位置为/usr/local/mysql/data2.设置、修改日志路径MySQL日志路径可在MySQL配置文......