Sommaire
1. Fonctions de transformation (CAST et CONVERT)
Ces fonctions convertissent une valeur d’un type de données à un autre, essentielles pour harmoniser les formats avant analyse.
CAST
CAST
SELECT CAST('2023-10-25' AS DATE) AS date_converted;CONVERT
Similaire à CAST, mais avec une syntaxe spécifique à certains SGBD comme SQL Server.
CONVERT (SQL Server)
SELECT CONVERT(DATE, '2023-10-25') AS date_converted;Différence clé :
CAST est standard SQL et portable. CONVERT est spécifique à certains SGBD (SQL Server, Sybase) mais offre plus d’options de formatage.
2. Manipulation des chaînes de caractères
CONCAT
Concatène deux ou plusieurs chaînes de caractères.
CONCAT
SELECT CONCAT('Bonjour', ' ', 'le monde') AS message;SUBSTRING
Extrait une sous-chaîne d’une chaîne de caractères.
SUBSTRING
SELECT SUBSTRING('Bonjour le monde', 9, 2) AS sous_chaine; -- Résultat: "le"LENGTH (ou LEN)
Retourne la longueur d’une chaîne de caractères.
LENGTH
SELECT LENGTH('Bonjour') AS longueur; -- Résultat: 7UPPER et LOWER
Convertit une chaîne en majuscules ou en minuscules.
UPPER / LOWER
SELECT UPPER('Bonjour') AS majuscules; -- Résultat: "BONJOUR"
SELECT LOWER('BONJOUR') AS minuscules; -- Résultat: "bonjour"TRIM, LTRIM, RTRIM
Supprime les espaces en début et/ou fin de chaîne.
TRIM / LTRIM / RTRIM
SELECT TRIM(' Bonjour ') AS sans_espaces; -- Résultat: "Bonjour"
SELECT LTRIM(' Bonjour') AS sans_espaces_gauche; -- Résultat: "Bonjour"
SELECT RTRIM('Bonjour ') AS sans_espaces_droite; -- Résultat: "Bonjour"REPLACE
Remplace toutes les occurrences d’une sous-chaîne par une autre.
REPLACE
SELECT REPLACE('Bonjour le monde', 'le', 'la') AS remplace; -- Résultat: "Bonjour la monde"
schéma des fonctions CONCAT, SUBSTRING, TRIM, REPLACE
3. Manipulation des dates
CURRENT_DATE (ou GETDATE)
Retourne la date actuelle.
CURRENT_DATE
SELECT CURRENT_DATE AS aujourdhui;DATEADD
Ajoute un intervalle de temps à une date.
DATEADD
SELECT DATEADD(DAY, 5, '2023-10-25') AS date_ajoutee; -- Ajoute 5 joursDATEDIFF
Calcule la différence entre deux dates.
DATEDIFF
SELECT DATEDIFF(DAY, '2023-10-25', '2023-11-01') AS difference_jours; -- Résultat: 7DATEPART
Extrait une partie spécifique d’une date (année, mois, jour, etc.).
DATEPART
SELECT DATEPART(YEAR, '2023-10-25') AS annee; -- Résultat: 2023FORMAT
Formate une date selon un modèle spécifique.
FORMAT
SELECT FORMAT('2023-10-25', 'dd/MM/yyyy') AS date_formatee; -- Résultat: "25/10/2023"Note SGBD :
MySQL utilise DATE_ADD(), DATEDIFF() et DATE_FORMAT(). PostgreSQL utilise INTERVAL, AGE() et TO_CHAR(). Les concepts sont similaires, les noms diffèrent.
4. Fonctions mathématiques
ROUND
Arrondit un nombre à un certain nombre de décimales.
ROUND
SELECT ROUND(3.14159, 2) AS arrondi; -- Résultat: 3.14CEILING et FLOOR
Arrondit un nombre à l’entier supérieur ou inférieur.
CEILING / FLOOR
SELECT CEILING(3.14159) AS plafond; -- Résultat: 4
SELECT FLOOR(3.14159) AS plancher; -- Résultat: 3ABS
Retourne la valeur absolue d’un nombre.
ABS
SELECT ABS(-10) AS absolue; -- Résultat: 10POWER
Calcule la puissance d’un nombre.
POWER
SELECT POWER(2, 3) AS puissance; -- Résultat: 8SQRT
Calcule la racine carrée d’un nombre.
SQRT
SELECT SQRT(16) AS racine; -- Résultat: 45. Fonctions conditionnelles
CASE
Permet de définir des conditions dans une requête (équivalent du IF/THEN/ELSE).
CASE
SELECT nom,
CASE
WHEN age < 18 THEN 'Mineur'
ELSE 'Majeur'
END AS statut
FROM utilisateurs;COALESCE
Retourne la première valeur non nulle dans une liste. Idéal pour traiter les NULL.
COALESCE
SELECT COALESCE(NULL, 'Valeur par défaut') AS valeur; -- Résultat: "Valeur par défaut"NULLIF
Retourne NULL si deux valeurs sont égales. Utile pour éviter la division par zéro.
NULLIF
SELECT NULLIF(10, 10) AS resultat; -- Résultat: NULL
SELECT 10 / NULLIF(0, 0) AS pas_erreur; -- Évite division par zéroAstuce pratique :
Combinez NULLIF et COALESCE pour gérer les divisions par zéro :
SELECT COALESCE(ventes / NULLIF(nb_clients, 0), 0) AS moyenne_par_client FROM stats;
6. Fonctions d’agrégation
COUNT
Compte le nombre de lignes.
COUNT
SELECT COUNT(*) AS total_lignes FROM utilisateurs;
SELECT COUNT(DISTINCT ville) AS villes_distinctes FROM utilisateurs;SUM
Calcule la somme des valeurs d’une colonne.
SUM
SELECT SUM(salaire) AS total_salaires FROM employes;AVG
Calcule la moyenne des valeurs d’une colonne.
AVG
SELECT AVG(salaire) AS moyenne_salaires FROM employes;MIN et MAX
Retourne la valeur minimale ou maximale d’une colonne.
MIN / MAX
SELECT MIN(salaire) AS salaire_min, MAX(salaire) AS salaire_max FROM employes;GROUP_CONCAT (ou STRING_AGG)
Concatène les valeurs d’une colonne pour chaque groupe.
STRING_AGG / GROUP_CONCAT
-- SQL Server, PostgreSQL
SELECT departement, STRING_AGG(nom, ', ') AS employes
FROM employes
GROUP BY departement;
-- MySQL
SELECT departement, GROUP_CONCAT(nom SEPARATOR ', ') AS employes
FROM employes
GROUP BY departement;+40%
de productivité avec la maîtrise des fonctions SQL
Étude DBA, 2025
15+
fonctions à connaître absolument
Couvertes dans ce guide
Récapitulatif des fonctions SQL
| Catégorie | Fonction | Description | Exemple |
|---|---|---|---|
| Transformation | CAST | Convertit un type de données | CAST(‘2023-10-25’ AS DATE) |
CONVERT | Convertit (syntaxe spécifique) | CONVERT(DATE, ‘2023-10-25’) | |
| Chaînes | CONCAT | Concatène des chaînes | CONCAT(‘A’, ‘B’) |
SUBSTRING | Extrait une sous-chaîne | SUBSTRING(‘Bonjour’, 2, 3) | |
LENGTH | Longueur d’une chaîne | LENGTH(‘Bonjour’) | |
UPPER/LOWER | Majuscules/minuscules | UPPER(‘test’) | |
TRIM | Supprime les espaces | TRIM(’ test ‘) | |
REPLACE | Remplace une sous-chaîne | REPLACE(‘abc’, ‘b’, ‘x’) | |
| Dates | CURRENT_DATE | Date actuelle | CURRENT_DATE |
DATEADD | Ajoute un intervalle | DATEADD(DAY, 5, ‘2023-10-25’) | |
DATEDIFF | Différence entre dates | DATEDIFF(DAY, date1, date2) | |
DATEPART | Extrait une partie | DATEPART(YEAR, date) | |
FORMAT | Formate une date | FORMAT(date, ‘dd/MM/yyyy’) | |
| Maths | ROUND | Arrondit | ROUND(3.14159, 2) |
CEILING/FLOOR | Entier sup/inf | CEILING(3.14) | |
ABS | Valeur absolue | ABS(-10) | |
POWER | Puissance | POWER(2, 3) | |
SQRT | Racine carrée | SQRT(16) | |
| Conditionnelles | CASE | Conditions | CASE WHEN age<18 THEN ‘Mineur’ END |
COALESCE | Première non NULL | COALESCE(col, ‘default’) | |
NULLIF | NULL si égaux | NULLIF(a, b) | |
| Agrégation | COUNT | Compte les lignes | COUNT(*) |
SUM | Somme | SUM(colonne) | |
AVG | Moyenne | AVG(colonne) | |
MIN/MAX | Min/Max | MIN(colonne) | |
GROUP_CONCAT | Concatène par groupe | STRING_AGG(nom, ’, ‘) |
Particularités selon les SGBD
| Fonction | MySQL | PostgreSQL | SQL Server |
|---|---|---|---|
| Concaténation | CONCAT() ou || | || ou CONCAT() | CONCAT() ou + |
| Longueur chaîne | CHAR_LENGTH() ou LENGTH() | LENGTH() ou CHAR_LENGTH() | LEN() |
| Date actuelle | CURDATE(), NOW() | CURRENT_DATE, NOW() | GETDATE(), SYSDATETIME() |
| Formatage date | DATE_FORMAT() | TO_CHAR() | FORMAT() |
| Concaténation groupe | GROUP_CONCAT() | STRING_AGG() | STRING_AGG() |
Conseil : Pour du code portable entre SGBD, privilégiez les fonctions standard SQL quand elles existent (CAST, COALESCE, CASE, SUBSTRING).
FAQ
Quelle est la différence entre CAST et CONVERT ?
CAST est standard SQL, portable sur tous les SGBD. CONVERT est spécifique à certains SGBD (SQL Server, Sybase) mais offre des options de formatage supplémentaires. Pour du code portable, préférez CAST.
Comment gérer la division par zéro en SQL ?
Utilisez NULLIF : SELECT valeur / NULLIF(diviseur, 0) FROM table; Retourne NULL au lieu d'une erreur. Combine avec COALESCE pour une valeur par défaut : COALESCE(valeur / NULLIF(diviseur, 0), 0).
Comment concaténer les valeurs d'une colonne par groupe ?
MySQL : GROUP_CONCAT(nom SEPARATOR ', ')PostgreSQL / SQL Server : STRING_AGG(nom, ', ')Ces fonctions regroupent les valeurs d'une colonne en une seule chaîne par groupe.
Comment extraire le mois ou l'année d'une date ?
EXTRACT(MONTH FROM date_column) (standard SQL)DATEPART(MONTH, date_column) (SQL Server)MONTH(date_column) (MySQL)Tous retournent un entier (1-12 pour le mois, 4 chiffres pour l'année).
Quelle est la différence entre COUNT(*) et COUNT(colonne) ?
COUNT(*) compte toutes les lignes, y compris celles avec des NULL. COUNT(colonne) compte uniquement les lignes où la colonne n'est pas NULL. Pour compter les valeurs distinctes : COUNT(DISTINCT colonne).
Comment remplacer les valeurs NULL dans les résultats ?
Utilisez COALESCE(colonne, 'valeur_par_defaut') qui retourne la première valeur non NULL. Ou ISNULL(colonne, 'valeur_par_defaut') (SQL Server). Cela ne modifie pas la base, seulement l'affichage.
Conclusion
La maîtrise des fonctions SQL est essentielle pour tout analyste ou développeur de données. Ces fonctions vous permettent de transformer, nettoyer, calculer et agréger vos données directement dans la base, sans outils externes.
À retenir
- Transformation : CAST, CONVERT pour harmoniser les types.
- Chaînes : CONCAT, SUBSTRING, TRIM, REPLACE, UPPER/LOWER.
- Dates : DATEADD, DATEDIFF, DATEPART, FORMAT.
- Maths : ROUND, CEILING, FLOOR, ABS, POWER, SQRT.
- Conditions : CASE, COALESCE, NULLIF.
- Agrégation : COUNT, SUM, AVG, MIN, MAX, GROUP_CONCAT/STRING_AGG.
Pour aller plus loin : Découvrez notre tutoriel sur les fonctions de fenêtrage SQL (ROW_NUMBER, RANK, LEAD, LAG) pour des analyses avancées.