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

如何拆分SQL表str列中字符串的字母与数字并分行存储?

解决方案

要实现将字符串中的字母段与数字段分离并拆分到新行,你可以先在字母和数字的交界处插入分隔符,再使用STRING_SPLIT拆分处理后的字符串。以下是纯T-SQL的实现方法:

1. 示例表与数据

假设你的表名为YourTable,先创建并插入示例数据:

CREATE TABLE YourTable (ID INT, STR VARCHAR(50));
INSERT INTO YourTable VALUES
(1, 'AB1234KK'),
(2, 'ABC123DEF'),
(3, '1234AB');

2. 拆分逻辑实现

通过递归CTE在字母与数字的转换位置插入分隔符,再拆分字符串:

WITH SplitCTE AS (
    SELECT 
        ID, 
        STR AS OriginalStr,
        -- 定位字母转数字、数字转字母的位置
        PATINDEX('%[A-Z][0-9]%', STR) AS AlphaToNumPos,
        PATINDEX('%[0-9][A-Z]%', STR) AS NumToAlphaPos,
        STR AS ModifiedStr
    FROM YourTable

    UNION ALL

    SELECT 
        ID,
        OriginalStr,
        PATINDEX('%[A-Z][0-9]%', ModifiedStr),
        PATINDEX('%[0-9][A-Z]%', ModifiedStr),
        -- 在交界位置插入逗号分隔符
        CASE 
            WHEN AlphaToNumPos > 0 AND (NumToAlphaPos = 0 OR AlphaToNumPos < NumToAlphaPos)
                THEN STUFF(ModifiedStr, AlphaToNumPos + 1, 0, ',')
            WHEN NumToAlphaPos > 0
                THEN STUFF(ModifiedStr, NumToAlphaPos + 1, 0, ',')
            ELSE ModifiedStr
        END
    FROM SplitCTE
    WHERE AlphaToNumPos > 0 OR NumToAlphaPos > 0
),
FinalStrings AS (
    -- 取每个ID处理完成的最终字符串
    SELECT ID, ModifiedStr
    FROM SplitCTE
    WHERE AlphaToNumPos = 0 AND NumToAlphaPos = 0
)
-- 拆分字符串并输出结果
SELECT 
    fs.ID,
    s.value AS STR
FROM FinalStrings fs
CROSS APPLY STRING_SPLIT(fs.ModifiedStr, ',') s
ORDER BY fs.ID, CHARINDEX(s.value, fs.ModifiedStr);

结果说明

执行后会得到你期望的输出:

IDSTR
1AB
11234
1KK
2ABC
2123
2DEF
31234
3AB

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:47:04