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
相关产品推荐
相关产品推荐

