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

在SQL Server中将指定分隔字符串转换为结构化列的需求

在SQL Server中拆分竖线分隔字符串为结构化列

方法1:使用STRING_SPLIT + PIVOT(适用于SQL Server 2016及以上版本)

利用STRING_SPLIT函数拆分字符串,结合行号标记拆分项的位置,再通过PIVOT将行数据转换为指定列:

DECLARE @InputStr NVARCHAR(100) = 'H|A|100|200|300|400|500';

SELECT 
    [1] AS [From],
    [2] AS [To],
    [3] AS [FromID],
    [4] AS [ToID],
    [5] AS [Distance1],
    [6] AS [Distance2],
    [7] AS [Distance3]
FROM (
    SELECT 
        value,
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS ItemIndex
    FROM STRING_SPLIT(@InputStr, '|')
) AS SplitData
PIVOT (
    MAX(value)
    FOR ItemIndex IN ([1], [2], [3], [4], [5], [6], [7])
) AS PivotResult;

方法2:使用字符串截取函数(兼容低版本SQL Server)

如果你的SQL Server版本不支持STRING_SPLIT,可以通过嵌套CHARINDEX定位分隔符位置,再用SUBSTRING截取对应字段:

DECLARE @InputStr NVARCHAR(100) = 'H|A|100|200|300|400|500';

SELECT
    -- 截取第一个字段
    SUBSTRING(@InputStr, 1, CHARINDEX('|', @InputStr) - 1) AS [From],
    -- 截取第二个字段
    SUBSTRING(@InputStr, CHARINDEX('|', @InputStr) + 1, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr) + 1) - CHARINDEX('|', @InputStr) - 1) AS [To],
    -- 截取第三个字段
    SUBSTRING(@InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr) + 1) + 1, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr) + 1) + 1) - CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr) + 1) - 1) AS [FromID],
    -- 截取第四个字段
    SUBSTRING(@InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr) + 1) + 1) + 1, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr) + 1) + 1) + 1) - CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr) + 1) + 1) - 1) AS [ToID],
    -- 截取第五个字段
    SUBSTRING(@InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr) + 1) + 1) + 1) + 1, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr) + 1) + 1) + 1) + 1) - CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr) + 1) + 1) + 1) - 1) AS [Distance1],
    -- 截取第六个字段
    SUBSTRING(@InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr) + 1) + 1) + 1) + 1) + 1, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr) + 1) + 1) + 1) + 1) + 1) - CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr, CHARINDEX('|', @InputStr) + 1) + 1) + 1) + 1) - 1) AS [Distance2],
    -- 截取最后一个字段
    RIGHT(@InputStr, CHARINDEX('|', REVERSE(@InputStr)) - 1) AS [Distance3];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 17:23:28