我有一个表,在一列中包含一个可变长度分隔的字符串,例如:
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