我有以下列,其中包含以逗号分隔的值。如何将其转换为在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
答案 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) = ','