Många RDBMS har en INSTR()
funktion som gör att vi kan hitta en delsträng i en sträng. Vissa (som MySQL och MariaDB) har också en LOCATE()
funktion och en POSITION()
funktion (stöds även av PostgreSQL), som gör en liknande sak.
SQL Server har ingen INSTR()
fungera. Den har inte heller en LOCATE()
eller POSITION()
fungera. Men den har CHARINDEX()
funktion som gör samma sak.
SQL Server har också PATINDEX()
funktion, som gör ett liknande jobb som CHARINDEX()
.
CHARINDEX()
Funktion
Här är ett exempel på CHARINDEX()
funktion:
SELECT CHARINDEX('news', 'No news is good news');
Resultat:
4
Funktionen accepterar ett tredje argument som låter oss ange var vi ska börja sökningen:
SELECT CHARINDEX('news', 'No news is good news', 5);
Resultat:
17
I det här exemplet startade vi sökningen vid position 5, vilket var efter början av den första förekomsten av news
, så den returnerade positionen för den andra förekomsten.
PATINDEX()
Funktion
PATINDEX()
funktionen liknar CHARINDEX()
, förutom att det tillåter oss att söka efter ett mönster, snarare än en specifik sträng.
Här är ett exempel för att illustrera vad jag menar:
SELECT PATINDEX('%ew%', 'No news is good news');
Resultat:
5
Så här händer om jag tar bort jokertecken:
SELECT PATINDEX('ew', 'No news is good news');
Resultat:
0
Se PATINDEX()
kontra CHARINDEX()
för mer om skillnaderna mellan dessa två funktioner.