在 SQL 中拆分多个字符串
Split multiple strings in SQL
我正在尝试同时拆分多列字符串。
我的原始数据如下:
表 1
UserID
Type
ProductID
1
A, B
001, 003
我想以
结束
UserID
Type
ProductID
1
A
001
1
B
003
当我使用
select *
from Table1
cross apply string_split(Type, ',')
cross apply string_split(ProductID, ',')
我最终得到了我不想要的 table...
UserID
Type
ProductID
1
A
001
1
B
003
1
A
003
1
B
001
如何同时拆分多列字符串?
在 SQL Server 2016 及更高版本中,您可以使用 OPENJSON
以确定性顺序拆分字符串。鉴于此示例数据:
CREATE TABLE dbo.Table1
(
UserID int,
Type varchar(255),
ProductID varchar(255)
);
INSERT dbo.Table1(UserID, Type, ProductID)
VALUES(1, 'A, B', '001, 003');
您可以使用此查询:
SELECT t.UserID, [Type] = LTRIM(j1.value), Product = LTRIM(j2.value)
FROM dbo.Table1 AS t
CROSS APPLY OPENJSON
(CONCAT('["',REPLACE(STRING_ESCAPE(Type, 'json'),',','","'),'"]')
) AS j1
CROSS APPLY OPENJSON
(CONCAT('["',REPLACE(STRING_ESCAPE(ProductID, 'json'),',','","'),'"]')
) AS j2
WHERE j1.[key] = j2.[key];
产生此输出:
UserID
Type
Product
1
A
001
1
B
003
您可以使用STRING_SPLIT
拆分字符串,row_number
在连接和[=中创建ID 13=]加入如下
select a.UserID,Type1,ProductID from
(SELECT
UserID,value Type1 ,row_number() over (order by value asc) rn
FROM Table1
cross apply STRING_SPLIT(Type, ',')) a
JOIN /*subquery*/
(SELECT
UserID,value ProductID,row_number() over (order by value asc) rn
FROM Table1
cross apply STRING_SPLIT(ProductID, ',')) b
on a.rn=b.rn
order by ProductID desc
我正在尝试同时拆分多列字符串。
我的原始数据如下:
表 1
UserID | Type | ProductID |
---|---|---|
1 | A, B | 001, 003 |
我想以
结束UserID | Type | ProductID |
---|---|---|
1 | A | 001 |
1 | B | 003 |
当我使用
select *
from Table1
cross apply string_split(Type, ',')
cross apply string_split(ProductID, ',')
我最终得到了我不想要的 table...
UserID | Type | ProductID |
---|---|---|
1 | A | 001 |
1 | B | 003 |
1 | A | 003 |
1 | B | 001 |
如何同时拆分多列字符串?
在 SQL Server 2016 及更高版本中,您可以使用 OPENJSON
以确定性顺序拆分字符串。鉴于此示例数据:
CREATE TABLE dbo.Table1
(
UserID int,
Type varchar(255),
ProductID varchar(255)
);
INSERT dbo.Table1(UserID, Type, ProductID)
VALUES(1, 'A, B', '001, 003');
您可以使用此查询:
SELECT t.UserID, [Type] = LTRIM(j1.value), Product = LTRIM(j2.value)
FROM dbo.Table1 AS t
CROSS APPLY OPENJSON
(CONCAT('["',REPLACE(STRING_ESCAPE(Type, 'json'),',','","'),'"]')
) AS j1
CROSS APPLY OPENJSON
(CONCAT('["',REPLACE(STRING_ESCAPE(ProductID, 'json'),',','","'),'"]')
) AS j2
WHERE j1.[key] = j2.[key];
产生此输出:
UserID | Type | Product |
---|---|---|
1 | A | 001 |
1 | B | 003 |
您可以使用STRING_SPLIT
拆分字符串,row_number
在连接和[=中创建ID 13=]加入如下
select a.UserID,Type1,ProductID from
(SELECT
UserID,value Type1 ,row_number() over (order by value asc) rn
FROM Table1
cross apply STRING_SPLIT(Type, ',')) a
JOIN /*subquery*/
(SELECT
UserID,value ProductID,row_number() over (order by value asc) rn
FROM Table1
cross apply STRING_SPLIT(ProductID, ',')) b
on a.rn=b.rn
order by ProductID desc