De nombreux SGBDR ont un INSTR()
fonction qui nous permet de trouver une sous-chaîne dans une chaîne. Certains (comme MySQL et MariaDB) ont également un LOCATE()
fonction et une POSITION()
fonction (également prise en charge par PostgreSQL), qui fait une chose similaire.
SQL Server n'a pas de INSTR()
une fonction. Il n'a pas non plus de LOCATE()
ou POSITION()
une fonction. Mais il a le CHARINDEX()
fonction qui fait la même chose.
SQL Server a également le PATINDEX()
fonction, qui fait un travail similaire à CHARINDEX()
.
Le CHARINDEX()
Fonction
Voici un exemple de CHARINDEX()
fonction :
SELECT CHARINDEX('news', 'No news is good news');
Résultat :
4
La fonction accepte un troisième argument qui nous permet de spécifier où commencer la recherche :
SELECT CHARINDEX('news', 'No news is good news', 5);
Résultat :
17
Dans cet exemple, nous avons commencé la recherche à la position 5, qui était après le début de la première occurrence de news
, il a donc renvoyé la position de la deuxième occurrence.
Le PATINDEX()
Fonction
Le PATINDEX()
la fonction est similaire à CHARINDEX()
, sauf qu'il nous permet de rechercher un modèle plutôt qu'une chaîne spécifique.
Voici un exemple pour illustrer ce que je veux dire :
SELECT PATINDEX('%ew%', 'No news is good news');
Résultat :
5
Voici ce qui se passe si je supprime les caractères génériques :
SELECT PATINDEX('ew', 'No news is good news');
Résultat :
0
Voir PATINDEX()
contre CHARINDEX()
pour en savoir plus sur les différences entre ces deux fonctions.