
La fonction SQL ORACLE SUBSTR permet d’extraite d’à partir de la chaine (char) n caractères depuis la m éme position
SUBSTR(char, m, n)
Exemple:
SELECT SUBSTR('Bonjour', 3, 2) FROM DUAL;
SUBSTR('BONJOUR',3,2)
---------------------
njNous pouvons ne pas spécifier le nombre de caractère à afficher (n). Dans ce cas, le reste de la chaine est affiché:
SELECT SUBSTR('Bonjour', 3) FROM DUAL;
SUBSTR('BONJOUR',3)
---------------------
njourL’indice (m) peut être négatif. Le calcul des indices commence par la fin de la chaine:
SELECT SUBSTR('Bonjour', -1), SUBSTR('Bonjour', -2), SUBSTR('Bonjour', -4) FROM DUAL;
SUBSTR('BONJOUR',-1) SUBSTR('BONJOUR',-2) SUBSTR('BONJOUR',-4)
-------------------- -------------------- --------------------
r ur jour
Syntaxe de SUBSTR en SQL Oracle
SUBSTR(chaine, position [, longueur])SUBSTR est l'équivalent Oracle de la fonction SUBSTRING des autres SGBD. Elle extrait une portion de chaine à partir de position. Si longueur est omise, Oracle renvoie tout jusqu'à la fin.
🧪 Envie de pratiquer ? Exécutez les exemples de cet article dans notre SQL Playground gratuit — aucun logiciel à installer.
| Paramètre | Rôle | Remarque |
|---|---|---|
| chaine | Texte source | VARCHAR2, CHAR, CLOB |
| position | Départ de l’extraction | commence à 1, pas à 0 |
| longueur | Nombre de caractères | optionnel |
Exemples pratiques de SUBSTR
SELECT SUBSTR('COURSSQL', 1, 5) FROM DUAL; -- COURS
SELECT SUBSTR('COURSSQL', 6) FROM DUAL; -- SQL
SELECT SUBSTR('COURSSQL', -3) FROM DUAL; -- SQL (3 derniers caractères)
SELECT SUBSTR('COURSSQL', -3, 2) FROM DUAL; -- SQPosition négative : c’est la grande force de SUBSTR en Oracle — on compte depuis la fin de la chaîne, sans avoir besoin de LENGTH.
Extraire un code dans une référence :
SELECT reference, SUBSTR(reference, 1, 3) AS code_agence FROM commandes;SUBSTR combiné à INSTR — extraire ce qui précède un séparateur :
-- récupérer le nom de domaine d'un email
SELECT SUBSTR(email, INSTR(email, '@') + 1) AS domaine FROM clients;SUBSTR vs SUBSTRING : équivalences entre SGBD
| SGBD | Fonction | Exemple |
|---|---|---|
| Oracle | SUBSTR | SUBSTR(txt, 1, 5) |
| SQL Server | SUBSTRING | SUBSTRING(txt, 1, 5) |
| MySQL | SUBSTRING / SUBSTR | SUBSTRING(txt, 1, 5) |
| PostgreSQL | SUBSTRING | SUBSTRING(txt FROM 1 FOR 5) |
Oracle n’accepte pas le mot-clé SUBSTRING : utilisez toujours SUBSTR. Les variantes SUBSTRB, SUBSTRC travaillent respectivement en octets et en caractères Unicode.
Erreurs fréquentes avec SUBSTR
- Croire que la position commence à 0 :
SUBSTR(x, 0, 3)est traité commeSUBSTR(x, 1, 3). - Longueur négative : renvoie NULL, jamais une erreur — bug silencieux difficile à repérer.
- Position au-delà de la chaîne : renvoie NULL et non une chaîne vide.
Questions fréquentes
Comment extraire les premiers caractères d’une chaîne en Oracle ?
Utilisez SUBSTR(chaine, 1, n) : par exemple SUBSTR('ORACLE', 1, 3) renvoie « ORA ».
Que fait SUBSTR avec une position négative ?
Une position négative compte depuis la fin de la chaîne : SUBSTR('ORACLE', -3) renvoie « CLE » (les 3 derniers caractères).
Quelle est la différence entre SUBSTR et INSTR ?
SUBSTR extrait une portion de chaîne, INSTR renvoie la position d’une sous-chaîne. On les combine souvent : SUBSTR(email, 1, INSTR(email, '@') - 1) extrait la partie avant le @.
Sur le même thème
- Fonction SQL ORACLE – INITCAP()
- Fonction SQL ORACLE – REPLACE()
- Fonction SQL ORACLE – DECODE()
- Fonction SQL ORACLE – COUNT()
- Fonction SQL ORACLE – MAX()
- Fonction SQL ORACLE – MIN()
📌 À lire aussi : INSTR Oracle : position d’une chaîne · REPLACE Oracle : remplacer du texte
