SQL 生成连续的编号

这篇具有很好参考价值的文章主要介绍了SQL 生成连续的编号。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

给大家一分钟,请思考:在你熟悉的数据库里使用 SQL 快速生成 001~999 的编号有哪些方法。

以下是我想到的在 MySQL 中可以实现的方法。

我把这个实现过程分成两部分:

  1. 生成 1~999 的序号;

  2. 对不足三位数的序号在前面补‘0’。

MySQL 提供了 LPAD() 左填充函数,因此第二部分已经解决。

生成 1~999 的序号的方法有:

  1. 找到任意一张记录数大于 1000 的表 t,执行 SELECT ROW_NUMBER() OVER() AS num FROM t LIMIT 999 就能够生成 1~999 的序号;如果数据库不支持窗口函数,还可以用用户变量,SELECT @rn:=@rn + 1 AS num FROM t,(SELECT @rn:=0) AS tmp LIMIT 999

  2. 使用递归,关于用递归生成连续序号的文章请看——生成数字序列;

  3. 手动生成 0-9 的数字,将这批数字放到临时表中,对临时表重复求笛卡尔积,具体实现后面有讲。

假设 t10 存储了 0-9 的数字,t10 和 t10 做笛卡尔积操作就会产生 100 条记录,再将这 100 条记录的结果集和 t10 执行笛卡尔积操作,就得到 1000 条记录的结果集。

因此,将三张 t10 的数据表执行笛卡尔积操作,第一张表的数乘以 100 得到的是百位上的数,第二张表的数乘以 10 就是十位上的数,第三张表的数对应的是个位。

WITH t10 AS 
(SELECT 0 AS num 
UNION
SELECT 1 
UNION
SELECT 2 
UNION
SELECT 3 
UNION
SELECT 4 
UNION
SELECT 5 
UNION
SELECT 6 
UNION
SELECT 7 
UNION
SELECT 8 
UNION
SELECT 9) 
SELECT 
  num,
  LPAD(num, 3, '0') AS seq 
FROM
  (SELECT 
    a.num * 100 + b.num * 10 + c.num AS num 
  FROM
    t10 a,
    t10 b,
    t10 c) t 
WHERE num > 0 
ORDER BY 1 

1~999 的编号 >>>

   num  seq     
------  --------
     1  001     
     2  002     
     3  003     
     4  004 
     ...
    99  099     
   100  100     
     ...     
   998  998     
   999  999    

注意,lpad(str,len,padstr) 函数有三个参数,第一个参数 str 是要处理的原字符串,第二个参数 len 表示 str 最终的长度,第三个参数 padstr 是填充的字符/字符串。

如果给定的 str 超出了 len 的长度,使用 LPAD() 函数将会得到意想不到的结果,不信请看 >>>文章来源地址https://www.toymoban.com/news/detail-651387.html

SELECT LPAD('1000',3,'0')


lpad('1000',3,'0')  
--------------------
100          

到了这里,关于SQL 生成连续的编号的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【AI Programming 】使用AI大模型来自动化生成DSL代码、RPC-SQL代码和UI Component 用户界面

    在当今的时代,随着人工智能技术的不断发展,越来越多的开发者开始探索低代码开发的领域。低代码开发可以让开发者更加高效地开发软件,减少重复性劳动,提高开发效率。在本文中,我们将介绍如何结合低代码开发和ChatGPT技术实现一个高效的开发流程。

    2024年02月13日
    浏览(43)
  • SQL标识列实现自动编号的步骤和技巧以及优势

    目录 前言: 过程: 1.步骤: 2.标识种子和表示增量: 效果展示:​ 优势: 总结: 在.NET中的例子里面遇到这么一个问题,不能将NULL插入列‘ID’,表Login.dbo.Scores’;列不允许有NULL值。INSERT失败。这个问题很明显,我在SQL数据库中设置了字段不能为NULL,但是我不想手动允许为NULL,那么

    2024年02月07日
    浏览(28)
  • 数据备份文件生成--根据表名生成对应的sql语句文件

    最近客户有个需求,希望在后台增加手动备份功能,将数据导出下载保存。 当然,此方法不适用于海量数据的备份,这只适用于少量数据的sql备份。 这是我生成的sql文件,以及sql文件里的insert语句,已亲测,可以直接执行: 项目是SSM框架,接下来就展示我的实现代码: 首先

    2024年02月07日
    浏览(27)
  • 解决IntelliJ IDEA在Mybatis 编写mapper.xml SQL语句时不自动提示SQL语句和数据库表的问题

    在Idea中链接数据库后,发现在MySql 的console中有SQL语句提示和数据表的提示,但是在编写mapper.xml中发现并没有提示,很烦,觉得效率下降。 在百度搜索后,发现了解决方法,出现了SQL语句的提示. 解决办法: 按下alt + enter,选择Language injection settings 然后选择SQL即可,但是这种

    2024年02月16日
    浏览(33)
  • 若依框架的startPage( )函数怎么自动关联查询SQL语句?

    使用JAVA语言的若依框架的时候,发现只要使用了startPage()函数, 并不需要前端传递分页的数据,也不需要注解,就能完成分页功能。预判他应该是使用类似拦截器的机制,但还是感觉很神奇,感觉知道个大概不过瘾,还是要更细致的了解才能满足,就想研究一下并记录下来。

    2024年02月08日
    浏览(29)
  • mysql 8.0 窗口函数 之 序号函数 与 sql server 序号函数 一样

    sql server 序号函数 序号函数 ROW_NUMBER() 顺序排序 RANK() 并列排序,会跳过重复的序号,比如序号为1,1,3 DENSE_RANK() 并列排序,不会跳过重复的序号,比如 序号为 1,1,2 语法结构 窗口函数的优点 使用窗口函数,只用了一步就完成了查询,而且,由于没有用到临时表,执行的

    2024年02月11日
    浏览(32)
  • 通过myBatis将sql语句返回的值自动包装成一个java对象(1)以及SqlSessionFactory

    如果我们从数据库中读取了一个用户的两个属性——用户名和密码。此时我们希望把这两个属性放入一个java的用户对象中。我们可以选择new一个user对象,向构造器传入我们刚刚读取的两个属性。但一旦从数据库中读取的内容变多,我们就需要new很多新的对象。这时我们就可

    2024年01月18日
    浏览(37)
  • 【IDEA优化】:解决MyBatis Mapper 的XML文件SQL语句无法自动提示问题(独家方案,亲测可用)

    IDEA中MyBatis编写mapper的SQL语句的时候无法提示SQL和数据库 无法正常方便的使用IDEA的提示功能,更准确无误的编写代码 亲测可用,一劳永逸(IDEA版本 IntelliJ IDEA 2021.1.3 ) 目的在于对 Mybatis的Mapper.XML中sql语句进行提示 网上的各种解决方案本质上其实都是配置SQL方言和SQL解析范

    2024年02月16日
    浏览(46)
  • 自动生成测试用例_接口测试用例自动生成工具

    写用例之前,我们应该熟悉API的详细信息。建议使用抓包工具Charles或AnyProxy进行抓包。 我们先来了解一下另一个项目har2case 他的工作原理就是将当前主流的抓包工具和浏览器都支持将抓取得到的数据包导出为标准通用的 HAR 格式(HTTP Archive),然后 HttpRunner 将 HAR 格式的数据

    2024年02月05日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包