Basierend auf der Lösung von @NothingsImpossible oder eher auf dem Kommentar zur meistgewählten Antwort (kurz unter der akzeptierten), habe ich die folgende quick-and-dirty Lösung gefunden, die meinen eigenen Bedürfnissen entspricht - sie hat den Vorteil, ausschließlich im SQL-Bereich zu sein.
Angenommen, ich habe einen String "erstes;zweites;drittes;viertes;fünftes", und ich möchte das dritte Token erhalten. Dies funktioniert nur, wenn wir wissen, wie viele Tokens der String haben wird - in diesem Fall sind es 5. Also mein Vorgehen ist, die letzten beiden Tokens wegzuschneiden (innere Abfrage) und dann die ersten beiden Tokens wegzuschneiden (äußere Abfrage).
Ich weiß, dass dies hässlich ist und die spezifischen Bedingungen abdeckt, in denen ich mich befand, aber ich veröffentliche es nur für den Fall, dass es für jemanden nützlich ist. Prost
select
RÜCKWÄRTS(
TEILSTRING(
reverse_substring,
0,
CHARINDEX(';', reverse_substring)
)
)
from
(
select
msg,
TEILSTRING(
RÜCKWÄRTS(msg),
CHARINDEX(
';',
RÜCKWÄRTS(msg),
CHARINDEX(
';',
RÜCKWÄRTS(msg)
)+1
)+1,
1000
) reverse_substring
from
(
select 'erstes;zweites;drittes;viertes;fünftes' msg
) a
) b
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