CONCAT Oracle : concaténer des chaînes (|| vs CONCAT)

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

La fonction SQL ORACLE CONCAT renvoie la concaténation de deux chaines de caractères

Publicité
CONCAT(chaines1, chaines2)

La fonction CONCAT renvoie la concaténation de deux chaines de caractères

SELECT CONCAT(CONCAT(FIRST_NAME, ' '), LAST_NAME) FROM EMPLOYEES
WHERE FIRST_NAME LIKE 'D%';

CONCAT(CONCAT(FIRST_NAME,''),LAST_NAME) 
---------------------------------------------- 
David Austin 
David Bernstein 
Daniel Faviet 
Douglas Grant 
Danielle Greene 
David Lee 
Diana Lorentz 
Donald OConnell 
Den Raphaely

Nous pouvons aussi utiliser l’opérateur || pour faire la concaténation des chaines de caractères sous ORACLE

SELECT
CONCAT(CONCAT(FIRST_NAME, ' '), LAST_NAME) CONCAT,
FIRST_NAME || ' ' || LAST_NAME OPERATEUR
FROM EMPLOYEES
WHERE FIRST_NAME LIKE 'D%';

CONCAT                              OPERATEUR
----------------------------------- ----------------------------------
David Austin                        David Austin
David Bernstein                     David Bernstein
Daniel Faviet                       Daniel Faviet
Douglas Grant                       Douglas Grant
Danielle Greene                     Danielle Greene
David Lee                           David Lee
Diana Lorentz                       Diana Lorentz
Donald OConnell                     Donald OConnell
Den Raphaely                        Den Raphaely

Syntaxe de CONCAT en SQL Oracle

CONCAT(chaine1, chaine2)

Attention : en Oracle, CONCAT n'accepte que deux arguments (contrairement à MySQL). Pour en assembler davantage, il faut imbriquer les appels ou utiliser l'opérateur ||.

🧪 Envie de pratiquer ? Exécutez les exemples de cet article dans notre SQL Playground gratuit — aucun logiciel à installer.

L’opérateur || : la méthode recommandée

SELECT prenom || ' ' || nom AS nom_complet FROM employes;

C'est la forme la plus lisible et la plus utilisée en Oracle. Avec CONCAT, la même requête devient :

SELECT CONCAT(CONCAT(prenom, ' '), nom) AS nom_complet FROM employes;

Exemples pratiques

-- adresse complète
SELECT CONCAT(CONCAT(rue, ', '), CONCAT(code_postal, ' ' || ville)) AS adresse FROM clients;

-- construire un identifiant
SELECT 'EMP-' || LPAD(id, 5, '0') AS matricule FROM employes;  -- EMP-00042

-- concaténer un nombre (conversion implicite)
SELECT 'Total : ' || montant || ' MAD' FROM factures;

Comment CONCAT gère les valeurs NULL

Oracle traite NULL comme une chaîne vide dans une concaténation — comportement unique parmi les SGBD :

SELECT 'A' || NULL || 'B' FROM DUAL;   -- AB (et non NULL)

Mais attention à l’effet de bord classique : si prenom est NULL, prenom || ' ' || nom renvoie « Dupont » avec un espace en trop. Sécurisez avec TRIM ou NVL :

SELECT TRIM(NVL(prenom,'') || ' ' || nom) AS nom_complet FROM employes;

Agréger plusieurs lignes : LISTAGG

Pour concaténer les valeurs de plusieurs lignes en une seule chaîne, CONCAT ne suffit pas — utilisez LISTAGG :

SELECT departement,
       LISTAGG(nom, ', ') WITHIN GROUP (ORDER BY nom) AS equipe
FROM employes GROUP BY departement;

Questions fréquentes

Comment concaténer des chaînes en Oracle ?

Deux méthodes : l’opérateur || (recommandé, N chaînes) ou la fonction CONCAT(a, b) (2 arguments seulement) : prenom || ' ' || nom.

CONCAT ou opérateur || : lequel choisir ?

L’opérateur || est plus lisible et accepte autant de chaînes que nécessaire, alors que CONCAT est limité à 2 arguments (il faut les imbriquer). En pratique, || est le standard chez Oracle.

Comment gérer les NULL dans une concaténation Oracle ?

Contrairement à d’autres SGBD, Oracle traite NULL comme une chaîne vide dans une concaténation : 'A' || NULL || 'B' renvoie « AB » — pas besoin de NVL.

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é

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 →