我在数据库中有字符串,其中项目的序列号在一起,如下所示
items1 = 'i1,i2,i3,i4,i5,i6'
items2 = 'j1,j2,j3,j4,j5,i6,i7,i8'
items3 = 'k1,k2,k3'
现在我想要这个字符串的结果输出,如下所示
|Srllno1 |Srllno2 |Srllno3 |Srllno4 |SrllRest |
---------------------------------------------------|
|i1 |i2 |i3 |i4 |i5,i6 |
|j1 |j2 |j3 |j4 |j5,i6,i7,i8 |
|k1 |k2 |k3 | | |
我尝试了下面的SQL
select
A_NUMBER,
items,
PARSENAME(REPLACE(items, ',', '.'), 1) AS Srllno1,
PARSENAME(REPLACE(items, ',', '.'), 2) AS Srllno2,
PARSENAME(REPLACE(items, ',', '.'), 3) AS Srllno3,
PARSENAME(REPLACE(items, ',', '.'), 4) AS Srllno4
from db.itemtable;
但是无法获取 SrlRest,除非我手动完成
我也尝试过
string_split
,但没有成功。
如何达到效果
只是为了扩展我的评论。
concat()
,将 null 转换为空字符串是可选的
示例
Declare @YourTable Table ([Item] varchar(50)) Insert Into @YourTable Values
('i1,i2,i3,i4,i5,i6')
,('j1,j2,j3,j4,j5,i6,i7,i8')
,('k1,k2,k3')
Select Item
,Pos1 = concat('',JSON_VALUE(JS,'$[0]'))
,Pos2 = concat('',JSON_VALUE(JS,'$[1]'))
,Pos3 = concat('',JSON_VALUE(JS,'$[2]'))
,Pos4 = concat('',JSON_VALUE(JS,'$[3]'))
,Rest = concat( JSON_VALUE(JS,'$[4]')
,','+JSON_VALUE(JS,'$[5]')
,','+JSON_VALUE(JS,'$[6]')
,','+JSON_VALUE(JS,'$[7]')
,','+JSON_VALUE(JS,'$[8]')
,','+JSON_VALUE(JS,'$[9]')
,','+JSON_VALUE(JS,'$[10]')
)
From @YourTable A
Cross Apply (values ('["'+replace(string_escape([Item],'json'),',','","')+'"]') ) B(JS)
结果