You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server如何通过T-SQL按字母序列展开扩展表行数据

方案结论

你提到的转ASCII码运算后转回字符的思路完全可行,3000行的原始数据量不会产生明显性能问题,整个查询开销可以控制在毫秒级。

实现代码

以下是适配你场景的T-SQL实现,核心是通过递归CTE预生成A-Z的字母序列,再和原始区间表关联完成展开:

-- 替换为你的原始业务表
DECLARE @OriginalTable TABLE (
    编号 INT,
    起始编码 VARCHAR(3),
    结束编码 VARCHAR(3),
    其他字段 NVARCHAR(100)
)
INSERT INTO @OriginalTable VALUES 
(1, 'G0W', 'G0Z', '示例数据1'),
(2, 'A1A', 'A1D', '示例数据2')

-- 递归生成A-Z的字母序列
;WITH LetterSeq AS (
    SELECT ASCII('A') AS AsciiCode
    UNION ALL
    SELECT AsciiCode + 1 FROM LetterSeq WHERE AsciiCode < ASCII('Z')
)
SELECT 
    t.编号,
    t.其他字段,
    -- 拼接完整编码:前两位固定 + 区间内的第三位字母
    LEFT(t.起始编码, 2) + CHAR(l.AsciiCode) AS 展开后编码
FROM @OriginalTable t
INNER JOIN LetterSeq l
    ON CHAR(l.AsciiCode) >= RIGHT(t.起始编码, 1)
    AND CHAR(l.AsciiCode) <= RIGHT(t.结束编码, 1)
ORDER BY t.编号, 展开后编码

扩展说明

如果你的编码规则更复杂(比如不止三位、或者前几位也存在区间变化),只需要把每一位的字符分别拆分,对应生成每一位的序列后拼接即可。比如要生成两位字母的全序列(AA~ZZ),只需要对字母序列做笛卡尔积:

;WITH LetterSeq AS (
    SELECT ASCII('A') AS AsciiCode
    UNION ALL
    SELECT AsciiCode + 1 FROM LetterSeq WHERE AsciiCode < ASCII('Z')
)
SELECT CHAR(a.AsciiCode) + CHAR(b.AsciiCode) AS TwoLetterCode
FROM LetterSeq a CROSS JOIN LetterSeq b

关联逻辑和上面的示例一致,性能依然不会有明显损耗。


内容的提问来源于stack exchange,提问作者Heisenberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:15:04