如何从数值范围向数据表插入带前缀的序列值
生成带前缀的连续数值并插入数据表的实现方案
绝对有可行的方案!不同数据库的实现方式各有巧思,我整理了几个主流数据库的具体做法,你可以直接套用:
MySQL 实现方法
递归CTE(公共表表达式)是MySQL 8.0+版本里非常好用的工具,能快速生成连续数字序列,再拼接前缀即可:
WITH RECURSIVE seq AS ( SELECT 1 AS num -- 起始数值 UNION ALL SELECT num + 1 FROM seq WHERE num < 10 -- 结束数值 ) INSERT INTO table1 (target_column) -- 替换成你的目标列名 SELECT CONCAT('abc', num) FROM seq;
这段代码会先生成1到10的连续数字,再通过CONCAT函数把前缀abc和数字拼接起来,最后批量插入到table1的指定列中。
PostgreSQL 实现方法
PostgreSQL自带的generate_series函数简直是处理序列的神器,一行代码就能搞定:
INSERT INTO table1 (target_column) SELECT 'abc' || generate_series(1, 10);
generate_series(1,10)直接生成1到10的整数序列,用||运算符就能轻松拼接字符串前缀,简单高效。
SQL Server 实现方法
SQL Server同样支持递归CTE,不过字符串拼接需要把数字转换成字符串类型:
WITH seq AS ( SELECT 1 AS num UNION ALL SELECT num + 1 FROM seq WHERE num < 10 ) INSERT INTO table1 (target_column) SELECT 'abc' + CAST(num AS VARCHAR(10)) FROM seq;
这里用CAST把数字转成字符串,再用+运算符和前缀拼接,完成插入操作。
通用手动方案(适合所有数据库)
如果你的数据库版本较低,不支持递归CTE或序列函数,范围较小时可以直接手动写值:
INSERT INTO table1 (target_column) VALUES ('abc1'), ('abc2'), ('abc3'), ('abc4'), ('abc5'), ('abc6'), ('abc7'), ('abc8'), ('abc9'), ('abc10');
这种方法虽然繁琐,但胜在兼容性拉满,适合小范围的序列生成。
内容的提问来源于stack exchange,提问作者pablo brandenburg
相关产品推荐
相关产品推荐

