T-SQL中实现类Array功能生成规则有序不重复AlphaSeq序列的方法
实现方案
规则梳理
根据你给出的示例,序列的生成优先级为:
- 第一梯队:1位纯大写字母(A→B→C...)
- 第二梯队:1位大写字母+数字1(A1→B1→C1...)
- 第三梯队:2位纯大写字母,按第一位优先、第二位次之的顺序排列(AA→AB→AC...→BA→BB→BC...)
如果需要调整数字位支持0-9,或者增加小写字母、更多字符长度,可以自行修改字符集定义部分。
完整实现代码
CREATE TABLE #Index ( AlphaSeq VARCHAR(2), NumericSeq TINYINT IDENTITY(1,1) -- 直接用自增列生成数字序列,不用手动维护 ) DECLARE @Chars VARCHAR(26) = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' -- 定义允许使用的字母集合 DECLARE @i INT = 1, @j INT = 1 DECLARE @TotalLen INT = LEN(@Chars) -- 插入第一梯队:1位纯字母 WHILE @i <= @TotalLen BEGIN INSERT INTO #Index (AlphaSeq) VALUES (SUBSTRING(@Chars, @i, 1)) SET @i = @i + 1 END -- 插入第二梯队:1位字母+1,需要支持更多数字的可以把下面的'1'改成遍历0-9即可 SET @i = 1 WHILE @i <= @TotalLen BEGIN INSERT INTO #Index (AlphaSeq) VALUES (CONCAT(SUBSTRING(@Chars, @i, 1), '1')) SET @i = @i + 1 END -- 插入第三梯队:2位纯字母 SET @i = 1 WHILE @i <= @TotalLen BEGIN SET @j = 1 WHILE @j <= @TotalLen BEGIN INSERT INTO #Index (AlphaSeq) VALUES (CONCAT(SUBSTRING(@Chars, @i, 1), SUBSTRING(@Chars, @j, 1))) SET @j = @j + 1 END SET @i = @i + 1 END -- 取前100条符合要求的结果,你可以根据需要调整数量 SELECT TOP 100 * FROM #Index
代码说明
- 直接用自增列
NumericSeq自动维护数字序列,不需要手动写变量计数,避免出错 - 字符集
@Chars可以自行修改,比如要包含数字、小写字母直接往字符串里加就行 - 如果你不需要某一梯队的序列,直接删掉对应插入块的代码即可
- 最终查询可以用
TOP控制返回的行数,匹配你原来要生成100条的需求
内容的提问来源于stack exchange,提问作者IdiotGuy8907
相关产品推荐
相关产品推荐

