Veel RDBMS'en hebben een INSTR()
functie waarmee we een substring binnen een string kunnen vinden. Sommige (zoals MySQL en MariaDB) hebben ook een LOCATE()
functie en een POSITION()
functie (ook ondersteund door PostgreSQL), die iets soortgelijks doen.
SQL Server heeft geen INSTR()
functie. Het heeft ook geen LOCATE()
of POSITION()
functie. Maar het heeft wel de CHARINDEX()
functie die hetzelfde doet.
SQL Server heeft ook de PATINDEX()
functie, die een soortgelijke taak uitvoert als CHARINDEX()
.
De CHARINDEX()
Functie
Hier is een voorbeeld van de CHARINDEX()
functie:
SELECT CHARINDEX('news', 'No news is good news');
Resultaat:
4
De functie accepteert een derde argument waarmee we kunnen specificeren waar de zoekopdracht moet beginnen:
SELECT CHARINDEX('news', 'No news is good news', 5);
Resultaat:
17
In dit voorbeeld zijn we begonnen met zoeken op positie 5, dat was na het begin van het eerste optreden van news
, dus het keerde terug naar de positie van het tweede exemplaar.
De PATINDEX()
Functie
De PATINDEX()
functie is vergelijkbaar met CHARINDEX()
, behalve dat het ons in staat stelt om naar een patroon te zoeken in plaats van naar een specifieke string.
Hier is een voorbeeld om te illustreren wat ik bedoel:
SELECT PATINDEX('%ew%', 'No news is good news');
Resultaat:
5
Dit gebeurt er als ik de jokertekens verwijder:
SELECT PATINDEX('ew', 'No news is good news');
Resultaat:
0
Zie PATINDEX()
vs CHARINDEX()
voor meer informatie over de verschillen tussen deze twee functies.