将 csv 字符串中的第 n 个分隔符转换为 SQL Server 中的列

问题描述 投票:0回答:1

我在数据库中有字符串,其中项目的序列号在一起,如下所示

   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
,但没有成功。 如何达到效果

sql sql-server split
1个回答
0
投票

只是为了扩展我的评论。

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)

结果

© www.soinside.com 2019 - 2024. All rights reserved.