如何将字符串的每个元素取出到单独的列中?

我的桌子像:

|----|----------------|--------------------------|----------------------|
| id |     tickets    |      comb1               |    comb2             |
|---------------------|--------------------------|----------------------|
|  1 | 3146000011086..|,13,31,50,66,77,..|,22,38,40,..   |                       
|---------------------|--------------------------|----------------------|
|2..n| 314600001924...| 5,14,23,..| 4,12,21,47,..  |
|-----------------------------------------------------------------------|

我需要将comb1和comb2的每个元素都取出到像这样的列中:

|---------------------|------------------|------------------|---------------|
|   val_of_comb1(1)   |  val_of_comb1(2) | ..val_of_comb2(1)|val_of_comb2(2)|
|---------------------|------------------|------------------|---------------|
|                     |         13       |                  |      22       |
|---------------------|------------------|------------------|---------------|
|          5          |         14       |     .. 4         |      12       |
|---------------------|------------------|------------------|---------------|

也许带循环取出每个元素? (但是如果我有很多记录,它将如何影响数据库)欢迎任何想法

HAWOSHISHUI 回答:如何将字符串的每个元素取出到单独的列中?

A。 cross applypivotstring_split

如果Comb1分为12个字符串,则为以下版本。

drop table X
create table X 
(
id int,comb1 nvarchar(max)
);

insert into X values (1,',13,31,50,66,77,..');
insert into X values (2,'5,14,23,..');

-- From https://stackoverflow.com/questions/12195504/splitting-a-string-then-pivoting-result by Kannan Kandasamy
select * from (
select * from X x cross apply (select RowN=Row_Number() over (Order by (SELECT NULL)),value from string_split(x.Comb1,') ) d) src
pivot (max(value) for src.RowN in([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])) as p
id  comb1   1   2   3   4   5   6   7   8   9   10  11  12
1,..        13      31      50  66  77  ..  NULL    NULL    NULL
2   5,..   5   14  23          50          ..  NULL    NULL    NULL

B。只需STRING_SPLIT和代码

一种选择是使用STRING_SPLIT,它将返回行。

select value from STRING_SPLIT(',..',');
value

13

31

50
66
77
..

然后您可以收集代码中的所有行,并将它们收集为数组。

本文链接:https://www.f2er.com/3162294.html

大家都在问