MSSQL – String splitten

Um unter MSSQL einen Feldinhalt/String direkt im SQL-Statement auf Basis eines Trennzeichens zu splitten gibt es durchaus mehrere Wege.

Nachfolgend ein Beispiel, in dem der Benutzername aus einer Benutzerverwaltung nach Vor- und Nachname gesplittet wird.
 

Vorhandene Namen in einer Beispieltabelle b210 sind z.B. „Max Müller“ und „Max von Müller“.
Folgendes SQL soll den 1. und 2. Vornamen auslesen, wobei für den zweiten Namen eine CASE-Abfrage integriert wird, damit im nachfolgenden SUBSTRING kein Fehler durch z.B. negative Werte das SQL auf einen Fehler laufen läßt.
Das Splitten übernimmt die Funktion CHARINDEX und die Positionen werden dabei über ein CROSS APPLY übernommen, was ähnlich einem JOIN verwendet wird/werden kann:

SELECT b210.name As Name
     , SUBSTRING(b210.name, 0, P1.Pos) AS Vorname
     , CASE 
         WHEN P2.Pos > 0
         THEN SUBSTRING(b210.name, P1.Pos + 1, P2.Pos - P1.Pos -1) 
         ELSE ' '
       END AS Vorname_2
FROM   b210
       CROSS APPLY (SELECT (CHARINDEX(' ', b210.name, 0))) AS P1(Pos)
       CROSS APPLY (SELECT (CHARINDEX(' ', b210.name, P1.Pos+1))) AS P2(Pos)

Das Ergebnis sieht dann so aus:
Splitten von Strings unter MSSQL

Quellen/Infos: Post bei Stackexchange / Info von MS / Post im MSDN-Forum / CHARINDEX / SUBSTRING / CASE

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.