La fonction DATE_FORMAT(), dans le langage SQL et plus particulièrement avec MySQL, permet de formater une donnée DATE dans le format indiqué. Il s’agit de la fonction idéal si l’ont souhaite définir le formatage de la date directement à partir du langage SQL et pas uniquement dans la partie applicative.
Syntaxe
La fonction DATE_FORMAT() s’utilise via la syntaxe suivante :
SELECT DATE_FORMAT(date, format)
Le premier paramètre correspond à une donnée de type DATE (ou DATETIME), tandis que le deuxième paramètre est une chaîne de caractère contenant le choix de formatage :
- %a : nom du jour de la semaine abrégé (Sun, Mon, … Sat)
- %b : nom du mois abrégé (Jan, Fev, … Dec)
- %c : numéro du mois (0, 1, 2, … 12) (numérique)
- %D : numéro du jour, avec le suffixe anglais (0th, 1st, 2nd, 3rd, …)
- %d : numéro du jour du mois, sous 2 décimales (00..31) (numérique)
- %e : numéro du jour du mois (0..31) (numérique)
- %f : microsecondes (000000..999999)
- %H : heure (00..23)
- %h : heure (01..12)
- %I : heure (01..12)
- %i : minutes (00..59) (numérique)
- %j : jour de l’année (001..366)
- %k : heure (0..23)
- %l : heure (1..12)
- %M : nom du mois (January..December)
- %m : mois (00..12) (numérique)
- %p : AM ou PM
- %r : heure au format 12-heures (hh:mm:ss suivi par AM ou PM)
- %S : secondes (00..59)
- %s : secondes (00..59)
- %T : heure au format 24 heures (hh:mm:ss)
- %U : Semaine (00..53), pour lequel le dimanche est le premier jour de la semaine; WEEK() mode 0
- %u : Semaine (00..53), pour lequel le lundi est le premier jour de la semaine; WEEK() mode 1
- %V : Semaine (01..53), pour lequel le dimanche est le premier jour de la semaine; WEEK() mode 2; utilisé avec %X
- %v : Semaine (01..53), pour lequel le lundi est le premier jour de la semaine; WEEK() mode 3; utilisé avec %x
- %W : nom du jour de la semaine (Sunday, Monday, … Saturday)
- %w : numéro du jour de la semaine (0=dimanche, 1=lundi, … 6=samedi)
- %X : numéro de la semaine de l’année, pour lequel le dimanche est le premier jour de la semaine, numérique, 4 digits; utilisé avec %V
- %x : numéro de la semaine de l’année, pour lequel le lundi est le premier jour de la semaine, numérique, 4 digits; utilisé avec %v
- %Y : année, numérique (avec 4 digits)
- %y : année, numérique (avec 2 digits)
- %% : un caractère %
- %x x, pour n’importe lequel “x” non listé ci-dessus
Exemple
Il est possible de combiner plusieurs valeurs ci-dessous afin d’obtenir le formatage d’une date dans le format de son choix. Voici une liste d’exemples d’usages de cette fonction DATE_FORMAT() dans des requêtes SQL :
SELECT DATE_FORMAT("2018-09-24", "%D %b %Y"); -- résultat : "24th Sep 2018" SELECT DATE_FORMAT("2018-09-24", "%M %d %Y"); -- résultat : "September 24 2018" SELECT DATE_FORMAT("2018-09-24 22:21:20", "%W %M %e %Y"); -- résultat : "Monday September 24 2018" SELECT DATE_FORMAT("2018-09-24", "%d/%m/%Y"); -- résultat : "24/09/2018" SELECT DATE_FORMAT("2018-09-24", "Message du : %d/%m/%Y"); -- résultat : "Message du : 24/09/2018" SELECT DATE_FORMAT("2018-09-24 22:21:20", "%H:%i:%s"); -- résultat : "22:21:20"
Les exemples ci-dessous ne sont que quelques cas d’usages, la richesse de la fonction DATE_FORMAT() réside dans le fait qu’il est possible de combiner le formatage de la façon qui vous intéresse. La fonction est idéale pour s’adapter au formatage de date et heure dans des projets internationaux.
Exemple d’usage dans une requête SQL réelle :
SELECT *, DATE_FORMAT(date_inscription, "%d/%m/%Y") FROM utilisateur;
La requête ci-dessous permet d’obtenir la liste des données d’une table contenant des utilisateurs, ainsi que la date d’inscription avec un formatage jour/mois/année prêt à être exploité affiché dans un format facile à lire pour les utilisateurs.