Dans le langage SQL, la fonction INSTR() est utilisé par MySQL et Oracle pour obtenir la position d’une occurrence dans une chaîne de caractères. Cette fonction permet donc de savoir si une chaîne est présente dans une autre chaîne et d’obtenir par la même occasion sa position.
A noter : la fonction est identique LOCATE() à la seule différence que les 2 paramètres qui la compose sont inversés.
Syntaxe
Cette fonction s’utilise avec la syntaxe suivante :
SELECT INSTR( str1 , str2 );
Dans la requête ci-dessus, la fonction INSTR() va chercher et retourner la position de str2 dans str1. Si la chaîne str2 n’est pas présente dans str1, alors la fonction retournera la position 0.
Il faut également savoir que si la chaîne str2 est présente plusieurs fois dans str1, alors ce sera seulement la position de la première occurrence qui sera retournée.
Exemple
Exemple simple
Pour montrer concrètement l’utilité de cette fonction, prenons une requête SQL simple dans laquelle nous allons chercher le mot “world” dans la chaîne de caractère “hello world!”.
SELECT INSTR( 'hello world!' , 'world' );
Résultat :
7
Le résultat de la requête retourne bien la position du début du mot “world”.
Position dans une table
Imaginons maintenant une table qui contient des verbes de la langue française.
Table “verbe” :
id | verbe |
---|---|
1 | être |
2 | avoir |
3 | aller |
4 | manger |
Si on souhaite réduire cette liste pour obtenir uniquement les verbes qui se termine par “er”, il est possible dans un premier temps de vérifier la présence et la position des lettres “er” dans le mot du verbe. Il est donc possible d’utiliser une requête SQL comme celle ci-dessous:
SELECT id, verbe, INSTR( verbe, 'er' ) FROM verbe
Résultat :
id | verbe | INSTR(verbe, 'er') |
---|---|---|
1 | être | 0 |
2 | avoir | 0 |
3 | aller | 4 |
4 | manger | 5 |
Ce résultat démontre bien qu’il est possible de filtrer les mots qui ne possèdent pas de la succession de lettres “er”. Toutefois, il peut y avoir des verbes qui utilises les lettres “er” en plein milieu du mot, alors que dans notre cas, il on souhaite vérifier si le verbe se termine par “er”.
Il serait possible d’utiliser en plus la fonction LENGTH() pour connaître la longueur du verbe et ainsi déterminer si la position de “er” correspond bien au 2 dernières lettres du verbe.