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

SQL Server如何按“-”分隔符拆分Description字段为三个独立列

你可以通过嵌套CHARINDEX定位第二个-的位置,结合SUBSTRING和TRIM函数提取剩余两列,以下是两种常用实现方案:

方案1:兼容所有SQL Server版本(嵌套CHARINDEX写法)

SELECT
    -- 原有邮箱提取逻辑补充TRIM去掉多余空格
    TRIM(SUBSTRING(SL_Reference,0,charindex('-',SL_Reference))) AS Email,
    -- 提取Doc Type
    TRIM(SUBSTRING(
        SL_Reference,
        CHARINDEX('-', SL_Reference) + 1,
        CHARINDEX('-', SL_Reference, CHARINDEX('-', SL_Reference) + 1) - CHARINDEX('-', SL_Reference) - 1
    )) AS [Doc Type],
    -- 提取Ref
    TRIM(SUBSTRING(
        SL_Reference,
        CHARINDEX('-', SL_Reference, CHARINDEX('-', SL_Reference) + 1) + 1,
        LEN(SL_Reference)
    )) AS Ref
FROM 你的表名

如果你的实际业务字段名为Description,把代码中所有SL_Reference替换为Description即可。

方案2:SQL Server 2016及以上版本(JSON简化写法)

利用JSON数组的下标取值,代码可读性更高:

SELECT
    TRIM(JSON_VALUE(split_arr, '$[0]')) AS Email,
    TRIM(JSON_VALUE(split_arr, '$[1]')) AS [Doc Type],
    TRIM(JSON_VALUE(split_arr, '$[2]')) AS Ref
FROM (
    -- 把字段值转换为标准JSON数组格式
    SELECT '["' + REPLACE(SL_Reference, ' - ', '","') + '"]' AS split_arr
    FROM 你的表名
) t

注意事项

  • 两种方案都内置了TRIM函数,适配示例中分段前后存在多余空格的场景
  • 方案2使用完整的' - '作为分隔符,可避免邮箱等内容内部包含减号时的拆分错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:09:05