跨多行拆分可变长度分隔的字符串(SQL)

前端之家收集整理的这篇文章主要介绍了跨多行拆分可变长度分隔的字符串(SQL)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个表,在一列中包含一个可变长度分隔的字符串,例如:

20,5,^24,^26,^
281,^34,2,^48,^44,^20,10,^
20,^379,1,^32,^71,^

我需要做的是拆分此字符串,以便在新行上返回^字符后面的每个数字.喜欢:

Item Number Item Code
Item1 20
Item2 ^24
Item3 ^24
Item4 ^27
Item5 ^28
Item6 ^65
Item7 ^66
Item8 ^39
Item9 ^379
Item10 ^448
Item11 ^427

我已经尝试了各种拆分函数,我可以设法通过将多个列中的值子串到子列然后使用unpivot将它们返回到多行来实现我需要的结果,但是这个方法不会处理这个字符串的可变长度.

任何更好的方法的想法?

解决方法

首先,我要说的是,这就是你首先在字段中没有逗号分隔数据的原因.没有简单有效的方法可以使用它.

也就是说,您可以使用递归查询来拆分字符串并从中获取数字:

with split as
(
  select
    item = cast('' as varchar(max)),source = cast('20,^281,^' as varchar(max))
  union all
  select
    item = substring(source,charindex(',',source)),source = substring(source,source) + 2,10000)
  from split
  where source > ''
)
select substring(item,item) -1)
from split
where item > ''

结果:

20
^24
^26
^281
^34
^48
^44
^20
^20
^379
^26
^32
^71
原文链接:https://www.f2er.com/mssql/83416.html

猜你在找的MsSQL相关文章