sql - SQL - 通过多个分隔符将字符串拆分为列
问题描述
这个问题似乎有很多解决方案,但是我的解决方案需要是动态的,因为分隔符的数量在 0 到 3 之间变化,并且需要相对高效,因为它将在 5 个循环中跨 >10m 行运行。
例如:
US
US-AL
US-AL-Talladega
US-AL-Talladega-35160
如果信息不在字符串中,则该解决方案需要能够将每个项目存放在具有 NULL 字段的 Country、State、County、ZIP 字段中。
任何关于最佳方法的评论将不胜感激,甚至向我指出我可能错过解决方案的方向将不胜感激
解决方案
另一种选择是使用一点 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
推荐阅读
- python - curve_fit 中的多个变量,sigma 的形状不正确?
- python - 如何从 numpy 数组中获取列而不是列表?
- html - 变换比例动画从错误的位置开始
- javascript - 将数组缓冲区转换为字符串 - 超出最大调用堆栈大小 - IE
- c# - 为什么调用此方法时省略了 Enumerable?命名空间混乱
- flutter - 如何解决“无法将参数类型'String'分配给参数类型'int'” - Flutter
- excel - 有没有办法在同一个 For Each 循环中逐步遍历多个单元格范围?
- apache - 如何使用 Apache UIMA Ruta 从两个子字符串中提取 ID 和日期?
- java - 有没有办法在 Java 中使用 readUTF() 检测二进制文件的结尾?
- javascript - 无法从 useEffect 更新 React 状态挂钩