Viele RDBMSs haben einen INSTR()
Funktion, die es uns ermöglicht, einen Teilstring innerhalb eines Strings zu finden. Einige (wie MySQL und MariaDB) haben auch ein LOCATE()
Funktion und eine POSITION()
Funktion (auch von PostgreSQL unterstützt), die etwas Ähnliches tun.
SQL Server hat kein INSTR()
Funktion. Es hat auch kein LOCATE()
oder POSITION()
Funktion. Aber es hat den CHARINDEX()
Funktion, die dasselbe tut.
SQL Server hat auch den PATINDEX()
Funktion, die eine ähnliche Aufgabe wie CHARINDEX()
ausführt .
Der CHARINDEX()
Funktion
Hier ist ein Beispiel für CHARINDEX()
Funktion:
SELECT CHARINDEX('news', 'No news is good news');
Ergebnis:
4
Die Funktion akzeptiert ein drittes Argument, mit dem wir angeben können, wo die Suche beginnen soll:
SELECT CHARINDEX('news', 'No news is good news', 5);
Ergebnis:
17
In diesem Beispiel haben wir die Suche an Position 5 gestartet, also nach dem Beginn des ersten Vorkommens von news
, also wurde die Position des zweiten Vorkommens zurückgegeben.
Der PATINDEX()
Funktion
Der PATINDEX()
Die Funktion ähnelt CHARINDEX()
, außer dass es uns ermöglicht, nach einem Muster statt nach einer bestimmten Zeichenfolge zu suchen.
Hier ist ein Beispiel, um zu veranschaulichen, was ich meine:
SELECT PATINDEX('%ew%', 'No news is good news');
Ergebnis:
5
Folgendes passiert, wenn ich die Platzhalterzeichen entferne:
SELECT PATINDEX('ew', 'No news is good news');
Ergebnis:
0
Siehe PATINDEX()
vs CHARINDEX()
für weitere Informationen zu den Unterschieden zwischen diesen beiden Funktionen.