SQL Server 2022 unterstützt die folgende Signatur von STRING_SPLIT
:
STRING_SPLIT ( string , separator [ , enable_ordinal ] )
Wenn das enable_ordinal
-Flag auf 1 gesetzt ist, wird das Ergebnis eine Spalte namens ordinal
enthalten, die die 1basierte Position des Teilstrings innerhalb des Eingabestrings darstellt:
SELECT *
FROM STRING_SPLIT('hallo john smith', ' ', 1)
| value | ordinal |
|-------|---------|
| hallo | 1 |
| john | 2 |
| smith | 3 |
Dies ermöglicht es uns, dies zu tun:
SELECT value
FROM STRING_SPLIT('hallo john smith', ' ', 1)
WHERE ordinal = 2
| value |
|-------|
| john |
Oder das:
SELECT str, substr
FROM (VALUES
('hallo john smith'),
('hallo jane'),
('hallo')
) AS t(str)
OUTER APPLY (
SELECT value
FROM STRING_SPLIT(str, ' ', 1)
WHERE ordinal = 2
) AS a(substr)
| str | substr |
|------------------|--------|
| hallo john smith | john |
| hallo jane | jane |
| hallo | null |
3 Stimmen
Siehe stackoverflow.com/questions/314824/… ebenfalls
5 Stimmen
Die höchsten Antworten hier sind - zumindest für mich - ziemlich altmodisch und eher veraltet. Prozedurale Logik, Schleifen, Rekursionen, CLR, Funktionen, viele Codezeilen... Es könnte interessant sein, die "aktiven" Antworten zu lesen, um aktuellere Ansätze zu finden.
0 Stimmen
Ich habe eine neue Antwort mit einem aktuelleren Ansatz hinzugefügt: stackoverflow.com/a/49669994/632604
0 Stimmen
Versuchen Sie Holen Sie sich das n-te Element einer Liste -> portosql.wordpress.com/2019/05/27/enesimo-elemento-lista
0 Stimmen
Einige Kommentare (einschließlich eines von mir) wurden gelöscht. Möchte sich einer der Moderatoren äußern?
1 Stimmen
@TimAbell, die Dokumentation besagt, dass "Die Reihenfolge entspricht möglicherweise nicht der Reihenfolge der Teilzeichenfolgen im Eingabestring".
0 Stimmen
@TimAbell Ja, ja... aber wie erhält man ein EINZELNES Ergebnis nach Index aus dem Ergebnis von
STRING_SPLIT
???0 Stimmen
Bis zur SQL Server 2022 ist die zuverlässigste Lösung
string_split
mit Ordinal. Siehe stackoverflow.com/a/70196925/87015