在SQL Server中反转逗号分隔的列值

时间:2014-04-22 16:21:03

标签: sql sql-server

我有以下列,其中包含以逗号分隔的值。如何将其转换为在SQL Server中提供后续输出的结果集?

DECLARE @TBL AS TABLE
(COLUMN1  NVARCHAR(100))

INSERT INTO @TBL 
SELECT 'AUD,BRL,GBP,CAD,CLP'

SELECT COLUMN1 FROM @TBL

COLUMN1
-------
AUD,BRL,GBP,CAD,CLP

我想要的结果:

COLUMN1
-------
AUD
BRL
GBP
CAD
CLP

3 个答案:

答案 0 :(得分:1)

可悲的是,这是一个初学者的错误。重新设计您的数据库,以便您将每个条目都放在一个单独的表中,而不再使用“重复组”。或者至少如果您要对数据库执行任何重要操作,您需要这样做。

create table Table1(
  Id int IDENTITY(1, 1) not null -- PK
)

create table Table2
(
    Id int IDENTITY(1, 1) not null, -- PK
    Table1Id int not null, -- FK to Table1
    Column1 varchar(50) not null
)

select *
from table1 t1
inner join table2 t2 on t2.Table1Id = t1.Id
order by t1.Id, t2.Column1

答案 1 :(得分:0)

尝试以下

 SELECT Split.T.value('.', 'VARCHAR(50)') AS column1  
 FROM  (SELECT  CAST ('<M>' + 
 REPLACE(column1, ',', '</M><M>') + '</M>' AS XML) AS String  
 FROM  @TBL) AS T CROSS APPLY String.nodes ('/M') AS Split(T); 

答案 2 :(得分:0)

 DECLARE @TBL AS TABLE
(COLUMN1  NVARCHAR(100))

INSERT INTO @TBL 
SELECT 'AUD,BRL,GBP,CAD,CLP'


 SELECT SUBSTRING(',' + COLUMN1 + ',', Number + 1,
CHARINDEX(',', ',' + COLUMN1 + ',', Number + 1) - Number -1)AS CaseID
FROM master..spt_values
cross join @TBL t
where type = 'P'
and Number <= LEN(',' + COLUMN1 + ',') - 1
AND SUBSTRING(',' + COLUMN1 + ',', Number, 1) = ','