
La fonction SQL ORACLE INSTR permet de retourner la position de la première occurrence d’une chaine de caractère (char2) dans une autre chaine de caractère (char1)
INSTR(char1, char2)
SELECT INSTR('Bonjour', 'o') FROM DUAL;
INSTR('BONJOUR','O')
----------------------
2Si jamais la chaine cherché n’existe pas alors le résultat est égal à 0
SELECT INSTR('Bonjour', 't') FROM DUAL;
INSTR('BONJOUR','T')
----------------------
0La fonction INSTR est sensible à la casse:
SELECT INSTR('Bonjour', 'b') FROM DUAL;
INSTR('BONJOUR','B')
----------------------
0Une astuce pour remédier à cela, c’est de rendre les deux chaines en majuscule ou en minuscule
SELECT INSTR(UPPER('Bonjour'), UPPER('b')) FROM DUAL;
INSTR(UPPER('BONJOUR'),UPPER('B'))
----------------------------------
1
Syntaxe complète de INSTR en SQL Oracle
INSTR(chaine, sous_chaine [, position_depart [, numero_occurrence]])INSTR renvoie la position (en commençant à 1) de la sous-chaîne recherchée, ou 0 si elle n'est pas trouvée. C'est l'équivalent Oracle de CHARINDEX (SQL Server) ou POSITION (standard SQL).
🧪 Envie de pratiquer ? Exécutez les exemples de cet article dans notre SQL Playground gratuit — aucun logiciel à installer.
| Paramètre | Défaut | Rôle |
|---|---|---|
| position_depart | 1 | où commencer ; négatif = recherche depuis la fin |
| numero_occurrence | 1 | quelle occurrence trouver (2e, 3e…) |
Exemples pratiques de INSTR
SELECT INSTR('COURSSQL ORACLE', 'SQL') FROM DUAL; -- 6
SELECT INSTR('COURSSQL ORACLE', 'XYZ') FROM DUAL; -- 0 (absent)
SELECT INSTR('a-b-c-d', '-', 1, 2) FROM DUAL; -- 4 (2e tiret)
SELECT INSTR('a-b-c-d', '-', -1) FROM DUAL; -- 6 (dernier tiret)Tester la présence d’une valeur (alternative à LIKE) :
SELECT * FROM produits WHERE INSTR(description, 'promo') > 0;INSTR + SUBSTR : le duo indispensable
C’est la combinaison la plus utilisée en Oracle pour découper des chaînes :
-- extraire le domaine d'une adresse email
SELECT email,
SUBSTR(email, 1, INSTR(email,'@') - 1) AS identifiant,
SUBSTR(email, INSTR(email,'@') + 1) AS domaine
FROM clients;
-- extraire l'extension d'un fichier (dernier point)
SELECT SUBSTR(fichier, INSTR(fichier, '.', -1) + 1) AS extension FROM documents;INSTR vs LIKE vs REGEXP_INSTR
| Besoin | Fonction conseillée |
|---|---|
| Savoir si une chaîne existe | LIKE ‘%mot%’ (plus lisible) |
| Connaître la position | INSTR |
| Chercher un motif complexe | REGEXP_INSTR |
| Trouver la n-ième occurrence | INSTR avec 4e argument |
Note performance : comme LIKE ‘%…%’, INSTR dans une clause WHERE empêche l’usage d’un index B-tree classique.
Questions fréquentes
À quoi sert la fonction INSTR en Oracle ?
INSTR renvoie la position d’une sous-chaîne : INSTR('bonjour@mail.com', '@') renvoie 8. Si la sous-chaîne est absente, INSTR renvoie 0.
Comment trouver la 2e occurrence d’un caractère ?
Utilisez les 3e et 4e arguments : INSTR(chaine, ',', 1, 2) cherche la 2e virgule à partir de la position 1.
Comment chercher depuis la fin de la chaîne ?
Position de départ négative : INSTR('a/b/c.txt', '/', -1) trouve le dernier « / » — pratique pour extraire un nom de fichier.

je vous remercie pour ce cours sur le sql sous oracle que j’avais oublie en cote d’ivoire et je retrouve les notes bien detaille.je suis un formateur au congo Brazza