加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:25:27 所属栏目:MsSql教程 来源:网络整理
导读:我有一个表,在一列中包含一个可变长度分隔的字符串,例如: 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 Item
我有一个表,在一列中包含一个可变长度分隔的字符串,例如:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读