Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何将字符串的每个元素提取到单独的列中?_Sql Server_Tsql - Fatal编程技术网

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

Sql server 如何将字符串的每个元素提取到单独的列中?,sql-server,tsql,Sql Server,Tsql,我的桌子像: |----|----------------|--------------------------|----------------------| | id | tickets | comb1 | comb2 | |---------------------|--------------------------|----------------------| | 1 | 3146000011086.

我的桌子像:

|----|----------------|--------------------------|----------------------|
| id |     tickets    |      comb1               |    comb2             |
|---------------------|--------------------------|----------------------|
|  1 | 3146000011086..|  ,13,  ,31,  ,50,66,77,..|  ,22,38,40,  ,  ..   |                       
|---------------------|--------------------------|----------------------|
|2..n| 314600001924...| 5,14,23,  ,  ,50,  ,  ,..| 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       |
|---------------------|------------------|------------------|---------------|
也许用循环取出每个元素?(但如果我有很多记录它将如何影响数据库)欢迎任何想法

a.
交叉应用
透视
,和
字符串分割
这里是一个版本,如果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,  ,  ,50,  ,  ,..');

-- 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
B.只需字符串和代码 一个选项是使用
STRING\u SPLIT
,它将返回行

select value from STRING_SPLIT(',13,  ,31,  ,50,66,77,..',',');
然后可以收集代码中的所有行,并将它们收集为一个数组。

A.
交叉应用
透视
,以及
字符串分割
这里是一个版本,如果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,  ,  ,50,  ,  ,..');

-- 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
B.只需字符串和代码 一个选项是使用
STRING\u SPLIT
,它将返回行

select value from STRING_SPLIT(',13,  ,31,  ,50,66,77,..',',');

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

什么版本的sql server?根据您使用的sql server版本,如果您使用pl/sql并将其推送到db server,则可以使用STRING_split来操作db,这将是最有效的方法,因为这需要最少的数据传输。如果您不擅长sql,那么在应用程序开发代码中使用for循环来处理此问题会更容易,但这确实是一种选择。该方法将取决于您是希望将此更改持久化到数据库本身中,还是仅在应用程序代码级别需要它。关于确切的解决方案,请参考:每个
梳是否有最大元素数?@Caius Jard MS SQL 14.0.17199.0(管理v17.3)什么版本的sql server?根据您正在使用的sql server版本,如果您使用pl/sql并将其推送到db server来操作db,则可以使用STRING_Split,这将是最有效的方法,因为这需要最少的数据传输。如果您不擅长sql,那么在应用程序开发代码中使用for循环来处理此问题会更容易,但这确实是一种选择。该方法将取决于您是希望将此更改持久化到数据库本身中,还是仅在应用程序代码级别需要它。关于确切的解决方案,请参考:每个
是否有最大元素数?@Caius Jard MS SQL 14.0.17199.0(管理v17.3)谢谢,先生,这正是我需要的@谢谢你,先生,这正是我需要的@鼓室