首页 > 解决方案 > SQL - 通过多个分隔符将字符串拆分为列

问题描述

这个问题似乎有很多解决方案,但是我的解决方案需要是动态的,因为分隔符的数量在 0 到 3 之间变化,并且需要相对高效,因为它将在 5 个循环中跨 >10m 行运行。

例如:

  US

  US-AL

  US-AL-Talladega

  US-AL-Talladega-35160

如果信息不在字符串中,则该解决方案需要能够将每个项目存放在具有 NULL 字段的 Country、State、County、ZIP 字段中。

任何关于最佳方法的评论将不胜感激,甚至向我指出我可能错过解决方案的方向将不胜感激

标签: sqlsql-serverstringdelimiter

解决方案


另一种选择是使用一点 XML 与 CROSS 或 OUTER APPLY

例子

Declare @YourTable table (YourCol varchar(100))
Insert Into @YourTable values
 ('US')
,('US-AL')
,('US-AL-Talladega')
,('US-AL-Talladega-35160')

Select A.* 
      ,B.*
 From @YourTable A
 Outer Apply (
                Select Country = xDim.value('/x[1]','varchar(max)')
                      ,State   = xDim.value('/x[2]','varchar(max)')
                      ,County  = xDim.value('/x[3]','varchar(max)')
                      ,ZIP     = xDim.value('/x[4]','varchar(max)')
                From  (Select Cast('<x>' + replace(YourCol,'-','</x><x>')+'</x>' as xml) as xDim) as A 
             ) B

退货

YourCol                 Country State   County      ZIP
US                      US      NULL    NULL        NULL
US-AL                   US      AL      NULL        NULL
US-AL-Talladega         US      AL      Talladega   NULL
US-AL-Talladega-35160   US      AL      Talladega   35160

推荐阅读