Fonction SQL ORACLE – LOWER()

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

Publicité

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

La fonction SQL ORACLE LOWER prend un seul argument de type chaine de caractère et retourne la même chaine mais en minuscule

SELECT LOWER('Bonjour LE MONDE') FROM DUAL;

LOWER('BONJOURLEMONDE')
-----------------------
bonjour le monde

Nous utilisons cette fonction par exemple lorsqu’on veut chercher une valeur mais on ne sait pas si cette valeur est en minuscule ou non. La solution sera de convertir les deux chaines en minuscule

SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY
FROM EMPLOYEES
WHERE LOWER(FIRST_NAME) = LOWER('DAVID');

EMPLOYEE_ID         FIRST_NAME        LAST_NAME              SALARY 
------------------- ----------------- ---------------------- -------------------
105                 David             Austin                 4800 
151                 David             Bernstein              9500 
165                 David             Lee                    6800 

Voir aussi les fonctions UPPER et INITCAP.

Syntaxe de LOWER en SQL Oracle

LOWER(chaine)

La fonction LOWER convertit tous les caractères d'une chaîne en minuscules. Elle accepte les types CHAR, VARCHAR2, NCHAR, NVARCHAR2 et CLOB, et renvoie le même type.

FonctionEffetExempleRésultat
LOWER()tout en minusculesLOWER('Cours SQL')cours sql
UPPER()tout en majusculesUPPER('Cours SQL')COURS SQL
INITCAP()1re lettre de chaque motINITCAP('cours sql')Cours Sql

Exemples pratiques

-- Normaliser un email avant insertion
INSERT INTO clients (email) VALUES (LOWER('[email protected]'));
-- -> [email protected]

-- Recherche insensible à la casse
SELECT * FROM clients WHERE LOWER(nom) = LOWER('DupOnt');

-- Générer un identifiant à partir du nom
SELECT LOWER(SUBSTR(prenom,1,1) || nom) AS login FROM employes;
-- Jean Dupont -> jdupont

-- Comparer deux colonnes sans tenir compte de la casse
SELECT * FROM v1 JOIN v2 ON LOWER(v1.code) = LOWER(v2.code);

LOWER et les accents

LOWER gère correctement les caractères accentués français : LOWER('ÉTÉ') renvoie 'été'. En revanche il ne supprime pas les accents. Pour comparer « ete » et « été », il faut aussi passer par NLSSORT ou CONVERT :

-- Insensible à la casse ET aux accents
SELECT * FROM clients
WHERE NLSSORT(nom, 'NLS_SORT=FRENCH_AI') = NLSSORT('ete', 'NLS_SORT=FRENCH_AI');

Les suffixes NLS_SORT : _CI = insensible à la casse (Case Insensitive), _AI = insensible aux accents et à la casse (Accent Insensitive).

Le piège des performances : LOWER casse vos index

C'est le point le plus important de cette page. Cette requête n'utilisera jamais un index classique sur nom :

SELECT * FROM clients WHERE LOWER(nom) = 'dupont';   -- full table scan

Parce que la colonne est enveloppée dans une fonction, Oracle ne peut plus se servir de l'index. Deux solutions :

-- Solution 1 : index basé sur une fonction
CREATE INDEX idx_clients_nom_lower ON clients (LOWER(nom));

-- Solution 2 : stocker la donnée déjà normalisée
ALTER TABLE clients ADD nom_norm VARCHAR2(100);
UPDATE clients SET nom_norm = LOWER(nom);
CREATE INDEX idx_clients_nom_norm ON clients (nom_norm);

La solution 1 est la plus simple ; la solution 2 est préférable si la valeur normalisée sert souvent.

Erreurs fréquentes

  • Oublier LOWER d'un seul côté — WHERE LOWER(nom) = 'Dupont' ne renvoie jamais rien : la valeur comparée doit être en minuscules elle aussi.
  • LOWER sur une colonne NULL — renvoie NULL, pas une chaîne vide. Combinez avec NVL si nécessaire.
  • Appliquer LOWER dans un ORDER BY — cela change le tri et empêche l'usage d'un index de tri ; préférez ORDER BY NLSSORT(nom, 'NLS_SORT=FRENCH_CI').

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 →