SUBSTR Oracle : extraire une sous-chaîne (exemples concrets)

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

La fonction SQL ORACLE SUBSTR permet d’extraite d’à partir de la chaine (char) n caractères depuis la m éme position

Publicité

SUBSTR(char, m, n)

Exemple:

SELECT SUBSTR('Bonjour', 3, 2) FROM DUAL;

SUBSTR('BONJOUR',3,2) 
--------------------- 
nj

Nous 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) 
--------------------- 
njour

L’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ètreRôleRemarque
chaineTexte sourceVARCHAR2, CHAR, CLOB
positionDépart de l’extractioncommence à 1, pas à 0
longueurNombre de caractèresoptionnel

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;  -- SQ

Position 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

SGBDFonctionExemple
OracleSUBSTRSUBSTR(txt, 1, 5)
SQL ServerSUBSTRINGSUBSTRING(txt, 1, 5)
MySQLSUBSTRING / SUBSTRSUBSTRING(txt, 1, 5)
PostgreSQLSUBSTRINGSUBSTRING(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é comme SUBSTR(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

📌 À lire aussi : INSTR Oracle : position d’une chaîne · REPLACE Oracle : remplacer du texte

Un nouveau tutoriel SQL par semaine

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

Publicité

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 →