INSTR Oracle : trouver la position d’une chaîne (exemples)

Illustration du tutoriel SQL Oracle : Fonction SQL ORACLE – INSTR()

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)

Publicité

INSTR(char1, char2)

SELECT INSTR('Bonjour', 'o') FROM DUAL;

INSTR('BONJOUR','O') 
---------------------- 
2

Si jamais la chaine cherché n’existe pas alors le résultat est égal à 0

SELECT INSTR('Bonjour', 't') FROM DUAL;

INSTR('BONJOUR','T') 
---------------------- 
0

La fonction INSTR est sensible à la casse:

SELECT INSTR('Bonjour', 'b') FROM DUAL;

INSTR('BONJOUR','B') 
---------------------- 
0

Une 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ètreDéfautRôle
position_depart1où commencer ; négatif = recherche depuis la fin
numero_occurrence1quelle 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

BesoinFonction conseillée
Savoir si une chaîne existeLIKE ‘%mot%’ (plus lisible)
Connaître la positionINSTR
Chercher un motif complexeREGEXP_INSTR
Trouver la n-ième occurrenceINSTR 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.

Sur le même thème

Un nouveau tutoriel SQL par semaine

Nous ne spammons pas ! Consultez notre politique de confidentialité pour plus d’informations.

Publicité

Un commentaire

  1. 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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Cours SQL & Oracle — 100% gratuitVoir les cours →