Bearbeiten - hätte schwören können, dass ich SQL Server sah
Wenn nicht 2016, fast jede Split/Parse-Funktion reicht aus.
Option 1 - Mit UDF
Declare @YourTable table (ID int,Interests varchar(250))
Insert Into @YourTable values
(1,'2|27|33|14|15')
Select A.ID
,B.*
From @YourTable A
Cross Apply [dbo].[udf-Str-Parse](A.Interests,'|') B
Option 2 - Ohne UDF
Select A.ID
,B.*
From @YourTable A
Cross Apply (
Select RetSeq = Row_Number() over (Order By (Select null))
,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
From (Select x = Cast('<x>' + replace((Select replace(A.Interests,'|','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.')) as X
Cross Apply x.nodes('x') AS B(i)
) B
Beide Return
ID RetSeq RetVal
1 1 2
1 2 27
1 3 33
1 4 14
1 5 15
Die UDF, wenn Sie interessieren
CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@Delimiter varchar(10))
Returns Table
As
Return (
Select RetSeq = Row_Number() over (Order By (Select null))
,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
From (Select x = Cast('<x>' + replace((Select replace(@String,@Delimiter,'§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.')) as X
Cross Apply x.nodes('x') AS B(i)
);
--Thanks Shnugo for making this XML safe
--Select * from [dbo].[udf-Str-Parse]('Dog,Cat,House,Car',',')
--Select * from [dbo].[udf-Str-Parse]('John Cappelletti was here',' ')
--Select * from [dbo].[udf-Str-Parse]('this,is,<test>,for,< & >',',')
Welche SQL verwenden Sie und haben Sie sich das Handbuch für String-Verarbeitungsfunktionen (Ich gehe davon aus das ein VARCHAR-Feld ist)? Und wie soll die tatsächliche Abfrage und die volle Ausgabe aussehen? – lurker
verwenden Sie etwas wie diese SELECT-Wert FROM STRING_SPLIT (** <> **, '|') –
Naidu