Zeichenkette gezielt beschränken - Drei Einträge durch Semikolon getrennt, Rest abschneiden

jannibunny88

Neuer Benutzer
Beiträge
1
Eine Abfrage bzw. Prozedur liefert einen Ergebnisstring wie diesen:

Name1; Name2; Name3; ... NameX

Wie bekomme ich es hin, dass ich bspw. drei oder 4 Ergebnisse angezeigt bekomme und der Rest inkl. dem letzten Trennzeichen abgeschnitten wird?

Gibt eine Funktion, die gezielt abschneidet?

Ich freue mich auf Euer Feedback. :)

VG
Jan
 
Werbung:
Eine Möglichkeit wäre mit charindex() 3 Trennzeichen zu springen. Setzt natürlich voraus das auch 3 Trennzeichen vorhanden sind.
Code:
DECLARE    @i VARCHAR(100) = 'Name1; Name2; Name3; ... NameX'

SELECT    left(@i,charindex(';',@i,charindex(';',@i,charindex(';',@i)+1)+1)-1)
 
Werbung:
Hallo zusammen,

bei solchen Verkettungen ist natürlich auch die Auswertung mittels XML-Funktionalitäten des SQL-Servers interessant, insbesondere bei komplexeren String-Verkettungen.
Das obige Beispiel ist aber sehr gut zur Darstellung der Funktionalität.

Hier mal ein kleines Skript von mir, um die Fragestellung zu lösen:

Code:
DECLARE @TST TABLE
    (
        Nr int IDENTITY(1,1),
        Liste varchar(4000)
    )
 
INSERT INTO @TST(Liste)
VALUES
('ABCD;EFGH;IJKL;MNOP;QRST;XYZ'),
('Test1;Test2;Test3'),
('Name1;Name2;Name3;Name4;Name5;Name6')
 
 
SELECT Nr, Liste
,CAST('<Name>'+REPLACE(Liste, ';', '</Name><Name>')+'</Name>' as xml).value('/Name[1]', 'varchar(255)') as Name1
,CAST('<Name>'+REPLACE(Liste, ';', '</Name><Name>')+'</Name>' as xml).value('/Name[2]', 'varchar(255)') as Name2
,CAST('<Name>'+REPLACE(Liste, ';', '</Name><Name>')+'</Name>' as xml).value('/Name[3]', 'varchar(255)') as Name3
,CAST('<Name>'+REPLACE(Liste, ';', '</Name><Name>')+'</Name>' as xml).value('/Name[4]', 'varchar(255)') as Name4
FROM @TST

Die jetzt als Spalten abgefragten Werte können natürlich auch wieder verkettet werden.
Auch ein Abfangen von NULL-Werten ist dann natürlich sinnvoll.

Viele Grüße,
Tommi
 
Zurück
Oben