Vous galérez à afficher une date correctement en SQL ? Vous avez une colonne de type datetime et vous voulez la transformer en une chaîne de caractères lisible, comme « 23/10/2024 » ? Comment choisir la bonne fonction selon votre base de données ?
Cet article vous donne les méthodes et les codes pour formater une date en SQL, que vous utilisiez MySQL ou SQL Server. Vous trouverez des exemples de code clairs et un tableau récapitulatif pour avoir la bonne syntaxe sous la main.
Tableau Récapitulatif des Codes de Formatage SQL
Pour aller droit au but, voici la liste des codes de formatage les plus courants. C’est la partie que vous allez sans doute vouloir copier-coller. La principale différence se joue entre MySQL qui utilise le symbole % et SQL Server qui utilise des abréviations comme dd ou yyyy.
| Système | Code | Description | Exemple (pour 2024-10-23 15:08:05) |
|---|---|---|---|
| MySQL / MariaDB | %d |
Jour du mois sur 2 chiffres | 23 |
| SQL Server | dd |
Jour du mois sur 2 chiffres | 23 |
| MySQL / MariaDB | %m |
Mois sur 2 chiffres (01-12) | 10 |
| SQL Server | MM |
Mois sur 2 chiffres (01-12) | 10 |
| MySQL / MariaDB | %Y |
Année sur 4 chiffres | 2024 |
| SQL Server | yyyy |
Année sur 4 chiffres | 2024 |
| MySQL / MariaDB | %H |
Heure sur 24h (00-23) | 15 |
| SQL Server | HH |
Heure sur 24h (00-23) | 15 |
| MySQL / MariaDB | %i |
Minutes (00-59) | 08 |
| SQL Server | mm |
Minutes (00-59) | 08 |
| MySQL / MariaDB | %s |
Secondes (00-59) | 05 |
| SQL Server | ss |
Secondes (00-59) | 05 |
| MySQL / MariaDB | %M |
Nom du mois complet (en anglais) | October |
| SQL Server | MMMM |
Nom du mois complet (selon la culture) | octobre (fr-FR) |
| MySQL / MariaDB | %W |
Nom du jour de la semaine (en anglais) | Wednesday |
| SQL Server | dddd |
Nom du jour de la semaine (selon la culture) | mercredi (fr-FR) |
Méthode 1 : Utiliser DATE_FORMAT() avec MySQL et MariaDB
Si votre base de données est MySQL ou MariaDB, la fonction à utiliser est DATE_FORMAT(). Elle est simple et faite pour ça. Elle prend deux paramètres : la date que vous voulez formater et la chaîne de formatage qui utilise les codes vus dans le tableau (ceux avec %).
La syntaxe de base est la suivante : DATE_FORMAT(date, format). Le premier paramètre est votre colonne de type DATE, DATETIME ou une chaîne de caractères valide. Le second est une chaîne qui décrit le format de sortie désiré.
Exemple 1 : Obtenir le format JJ/MM/AAAA
C’est le cas le plus courant en France. Pour transformer une date de type datetime en un format jour/mois/année, vous devez utiliser les codes %d, %m et %Y.
SELECT DATE_FORMAT('2024-10-23 15:08:05', '%d/%m/%Y');
-- Résultat : '23/10/2024'
Exemple 2 : Format littéral « Mois Jour, Année »
Pour un affichage plus lisible, comme sur un blog, vous pouvez utiliser les noms complets. La fonction DATE_FORMAT() utilise les noms anglais par défaut.
SELECT DATE_FORMAT('2024-10-23', '%M %d, %Y');
-- Résultat : 'October 23, 2024'
Exemple 3 : Formater la date et l’heure complètes
Si vous avez besoin de conserver les informations sur l’heure, les minutes et les secondes, il suffit d’ajouter les codes correspondants. Cela est utile pour des journaux d’événements ou des données de type log.
SELECT DATE_FORMAT('2024-10-23 15:08:05', '%d/%m/%Y %H:%i:%s');
-- Résultat : '23/10/2024 15:08:05'
DATE_FORMAT() renvoie toujours une chaîne de caractères (string). Vous ne pourrez plus faire de calculs de date sur le résultat sans le reconvertir. Utilisez-la uniquement pour l’affichage final des données.
Méthode 2 : Utiliser FORMAT() avec SQL Server (à partir de 2012)
Sur SQL Server (version 2012 et plus récentes), la fonction la plus souple est FORMAT(). Elle est plus puissante que DATE_FORMAT() car elle peut aussi formater des nombres et des devises. Elle gère aussi les spécificités culturelles, comme la langue.
La syntaxe de cette fonction est : FORMAT(valeur, format, [culture]). Le paramètre culture est optionnel mais très important. Il permet de définir la langue pour les noms des jours et des mois. Par exemple, ‘fr-FR’ pour le français ou ‘en-US’ pour l’anglais américain.
Exemple 1 : Format de date court avec la culture française
Pour obtenir le format JJ/MM/AAAA, on utilise le code de format standard ‘d’. Le paramètre de culture garantit que le séparateur sera bien le slash.
DECLARE @d datetime = '2024-10-23 15:08:05'; SELECT FORMAT(@d, 'd', 'fr-FR'); -- Résultat : '23/10/2024'
Exemple 2 : Format de date long avec la culture américaine
Pour afficher la date avec le nom du mois en toutes lettres, on utilise le format ‘D’. La culture va déterminer la langue et l’ordre des éléments.
DECLARE @d datetime = '2024-10-23'; SELECT FORMAT(@d, 'D', 'en-US'); -- Résultat : 'Wednesday, October 23, 2024'
Exemple 3 : Format personnalisé avec date et heure
Vous pouvez aussi construire votre propre chaîne de formatage, comme avec MySQL, mais en utilisant les codes spécifiques à SQL Server (dd, MM, yyyy, etc.).
DECLARE @d datetime = '2024-10-23 15:08:05'; SELECT FORMAT(@d, 'dd/MM/yyyy HH:mm:ss'); -- Résultat : '23/10/2024 15:08:05'
FORMAT() est très pratique mais peut être plus lente que d’autres fonctions comme CONVERT(). Pour des opérations sur de très grands volumes de données où la performance est critique, CONVERT() est souvent un meilleur choix.
Méthode 3 : L’alternative CONVERT() pour SQL Server (Toutes versions)
La fonction CONVERT() est la méthode « historique » pour formater une date heure sur SQL Server. Elle est compatible avec toutes les versions du SGBD et est souvent plus performante que FORMAT(). Son fonctionnement est un peu différent : elle utilise des codes de style numériques prédéfinis.
Sa syntaxe pour le formatage est : CONVERT(type_de_données, date, style). Pour formater une date, le premier paramètre sera souvent VARCHAR ou NVARCHAR. C’est le paramètre style qui définit le format de sortie.
Codes de style courants pour CONVERT()
Il existe des dizaines de codes, mais voici ceux que vous utiliserez le plus souvent. Chacun correspond à un format de date précis.
- 101 : Format U.S.
mm/dd/yyyy - 103 : Format français/britannique
dd/mm/yyyy - 108 : Heure uniquement
hh:mi:ss - 112 : Format ISO
yyyymmdd - 120 : Format ODBC
yyyy-mm-dd hh:mi:ss(24h)
Exemple 1 : Obtenir le format dd/mm/yyyy (style 103)
C’est le cas d’usage le plus simple pour un utilisateur français. Il suffit de spécifier le type de sortie (une chaîne de caractères) et le style 103.
DECLARE @d datetime = '2024-10-23 15:08:05'; SELECT CONVERT(VARCHAR, @d, 103); -- Résultat : '23/10/2024'
Exemple 2 : Extraire l’heure au format 24h (style 108)
Si seule la partie heure de votre datetime vous intéresse, le style 108 est parfait. Il ne retourne que les heures, minutes et secondes.
DECLARE @d datetime = '2024-10-23 15:08:05'; SELECT CONVERT(VARCHAR, @d, 108); -- Résultat : '15:08:05'
FAQ – Questions fréquentes sur le formatage des dates en SQL
Quelle est la meilleure fonction pour formater une date en SQL ?
La réponse dépend de votre système de gestion de base de données (SGBD) :
- Pour MySQL ou MariaDB : Utilisez
DATE_FORMAT(). C’est la fonction standard et la plus efficace. - Pour SQL Server (2012+) : La fonction
FORMAT()est la plus souple, surtout si vous devez gérer plusieurs langues (cultures). - Pour toutes les versions de SQL Server :
CONVERT()est une option très fiable et souvent plus performante. Elle est idéale si la compatibilité est votre priorité.
Comment gérer les valeurs NULL lors du formatage d’une date ?
Si votre colonne de date peut contenir des valeurs NULL, la fonction de formatage renverra NULL. Pour éviter cela, vous pouvez fournir une valeur par défaut en utilisant COALESCE ou ISNULL. Par exemple, pour afficher ‘Date non disponible’ si la date est nulle.
-- Pour SQL Server SELECT ISNULL(FORMAT(MaDate, 'dd/MM/yyyy'), 'Date non disponible') FROM MaTable; -- Pour MySQL (et SQL Server) SELECT COALESCE(DATE_FORMAT(MaDate, '%d/%m/%Y'), 'Date non disponible') FROM MaTable;
Comment extraire juste une partie de la date (jour, mois, année) ?
Si vous n’avez pas besoin de formater mais juste d’extraire une partie de la date sous forme numérique, il existe des fonctions dédiées qui sont plus efficaces. Ces fonctions renvoient un entier.
YEAR(date): Extrait l’année.MONTH(date): Extrait le mois (de 1 à 12).DAY(date): Extrait le jour du mois.
Ces fonctions sont très utiles pour les clauses GROUP BY ou WHERE, par exemple pour regrouper toutes les ventes d’un mois donné, quelle que soit l’année.
SELECT SUM(Montant) FROM Ventes WHERE YEAR(DateVente) = 2024;