Tutoriels

Guide Complet des Principales Fonctions SQL

Guide complet des fonctions SQL : CAST, CONCAT, SUBSTRING, DATEADD, ROUND, CASE, COUNT, AVG. Exemples pratiques pour chaque catégorie.

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: 7

UPPER 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"

Illustration des fonctions SQL de manipulation de chaînes

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 jours

DATEDIFF

Calcule la différence entre deux dates.

DATEDIFF

SELECT DATEDIFF(DAY, '2023-10-25', '2023-11-01') AS difference_jours; -- Résultat: 7

DATEPART

Extrait une partie spécifique d’une date (année, mois, jour, etc.).

DATEPART

SELECT DATEPART(YEAR, '2023-10-25') AS annee; -- Résultat: 2023

FORMAT

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.14

CEILING 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: 3

ABS

Retourne la valeur absolue d’un nombre.

ABS

SELECT ABS(-10) AS absolue; -- Résultat: 10

POWER

Calcule la puissance d’un nombre.

POWER

SELECT POWER(2, 3) AS puissance; -- Résultat: 8

SQRT

Calcule la racine carrée d’un nombre.

SQRT

SELECT SQRT(16) AS racine; -- Résultat: 4

5. 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éro

Astuce 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égorieFonctionDescriptionExemple
TransformationCASTConvertit un type de donnéesCAST(‘2023-10-25’ AS DATE)
CONVERTConvertit (syntaxe spécifique)CONVERT(DATE, ‘2023-10-25’)
ChaînesCONCATConcatène des chaînesCONCAT(‘A’, ‘B’)
SUBSTRINGExtrait une sous-chaîneSUBSTRING(‘Bonjour’, 2, 3)
LENGTHLongueur d’une chaîneLENGTH(‘Bonjour’)
UPPER/LOWERMajuscules/minusculesUPPER(‘test’)
TRIMSupprime les espacesTRIM(’ test ‘)
REPLACERemplace une sous-chaîneREPLACE(‘abc’, ‘b’, ‘x’)
DatesCURRENT_DATEDate actuelleCURRENT_DATE
DATEADDAjoute un intervalleDATEADD(DAY, 5, ‘2023-10-25’)
DATEDIFFDifférence entre datesDATEDIFF(DAY, date1, date2)
DATEPARTExtrait une partieDATEPART(YEAR, date)
FORMATFormate une dateFORMAT(date, ‘dd/MM/yyyy’)
MathsROUNDArronditROUND(3.14159, 2)
CEILING/FLOOREntier sup/infCEILING(3.14)
ABSValeur absolueABS(-10)
POWERPuissancePOWER(2, 3)
SQRTRacine carréeSQRT(16)
ConditionnellesCASEConditionsCASE WHEN age<18 THEN ‘Mineur’ END
COALESCEPremière non NULLCOALESCE(col, ‘default’)
NULLIFNULL si égauxNULLIF(a, b)
AgrégationCOUNTCompte les lignesCOUNT(*)
SUMSommeSUM(colonne)
AVGMoyenneAVG(colonne)
MIN/MAXMin/MaxMIN(colonne)
GROUP_CONCATConcatène par groupeSTRING_AGG(nom, ’, ‘)

Particularités selon les SGBD

FonctionMySQLPostgreSQLSQL Server
ConcaténationCONCAT() ou |||| ou CONCAT()CONCAT() ou +
Longueur chaîneCHAR_LENGTH() ou LENGTH()LENGTH() ou CHAR_LENGTH()LEN()
Date actuelleCURDATE(), NOW()CURRENT_DATE, NOW()GETDATE(), SYSDATETIME()
Formatage dateDATE_FORMAT()TO_CHAR()FORMAT()
Concaténation groupeGROUP_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.