Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

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

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von jannibunny88, 24 Februar 2016.

  1. jannibunny88

    jannibunny88 Neuer Benutzer

    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
     
  2. ukulele

    ukulele Datenbank-Guru

    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)
     
  3. Tommi

    Tommi Datenbank-Guru

    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
     
    ukulele gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden