Dans le monde des bases de données SQL, PostgreSQL est réputé pour sa robustesse et la richesse de ses fonctionnalités. L’une d’elles est sa solide prise en charge des types date et timestamp. Dans ce guide, on va voir comment formater des dates dans PostgreSQL, exemples de code à l’appui. Ce tutoriel s’adresse aux développeurs et à toutes les personnes à l’aise avec la technique qui veulent approfondir leurs connaissances de PostgreSQL.
Comprendre les dates dans PostgreSQL
Avant de te lancer dans le formatage des dates, il est essentiel de comprendre comment elles sont représentées dans PostgreSQL. PostgreSQL utilise le type de données «\u00a0Date\u00a0» pour stocker les dates. Voici comment créer un tableau avec une colonne DATE.
CREATE TABLE orders (
order_id serial PRIMARY KEY,
order_date DATE NOT NULL
);
Maintenant, insérons quelques données dans le tableau orders.
INSERT INTO orders (order_date) VALUES
('2022-04-01'),
('2022-04-02'),
('2022-04-03');
PostgreSQL est malin et sait interpréter une date à partir d’une chaîne si tu la fournis au format ISO 6801.
Comment formater des dates dans PostgreSQL\u00a0: utiliser la fonction TO_CHAR
La principale méthode pour formater des dates dans PostgreSQL est la fonction TO_CHAR. TO_CHAR permet de convertir des types date/heure en une chaîne suivant un motif précis. Voici comment l’utiliser\u00a0:
TO_CHAR(date, format)
La liste complète des options de formatage est disponible dans la documentation PostgreSQL. Voici les options de formatage en date de janvier 2024\u00a0:
| Motif | Description |
|---|---|
| HH | heure du jour (01–12) |
| HH12 | heure du jour (01–12) |
| HH24 | heure du jour (00–23) |
| MI | minute (00–59) |
| SS | seconde (00–59) |
| MS | milliseconde (000–999) |
| US | microseconde (000000–999999) |
| FF1 | dixième de seconde (0–9) |
| FF2 | centième de seconde (00–99) |
| FF3 | milliseconde (000–999) |
| FF4 | dixième de milliseconde (0000–9999) |
| FF5 | centième de milliseconde (00000–99999) |
| FF6 | microseconde (000000–999999) |
| SSSS, SSSSS | secondes écoulées depuis minuit (0–86399) |
| AM, am, PM ou pm | indicateur méridien (sans points) |
| A.M., a.m., P.M. ou p.m. | indicateur méridien (avec points) |
| Y,YYY | année (4 chiffres ou plus) avec virgule |
| YYYY | année (4 chiffres ou plus) |
| YYY | 3 derniers chiffres de l’année |
| YY | 2 derniers chiffres de l’année |
| Y | dernier chiffre de l’année |
| IYYY | année de numérotation des semaines ISO 8601 (4 chiffres ou plus) |
| IYY | 3 derniers chiffres de l’année de numérotation des semaines ISO 8601 |
| IY | 2 derniers chiffres de l’année de numérotation des semaines ISO 8601 |
| I | dernier chiffre de l’année de numérotation des semaines ISO 8601 |
| BC, bc, AD ou ad | indicateur d’ère (sans points) |
| B.C., b.c., A.D. ou a.d. | indicateur d’ère (avec points) |
| MONTH | nom complet du mois en majuscules (complété par des espaces jusqu’à 9 caractères) |
| Month | nom complet du mois avec majuscule initiale (complété par des espaces jusqu’à 9 caractères) |
| month | nom complet du mois en minuscules (complété par des espaces jusqu’à 9 caractères) |
| MON | nom abrégé du mois en majuscules (3 caractères en anglais, longueur variable selon la langue) |
| Mon | nom abrégé du mois avec majuscule initiale (3 caractères en anglais, longueur variable selon la langue) |
| mon | nom abrégé du mois en minuscules (3 caractères en anglais, longueur variable selon la langue) |
| MM | numéro du mois (01–12) |
| DAY | nom complet du jour en majuscules (complété par des espaces jusqu’à 9 caractères) |
| Day | nom complet du jour avec majuscule initiale (complété par des espaces jusqu’à 9 caractères) |
| day | nom complet du jour en minuscules (complété par des espaces jusqu’à 9 caractères) |
| DY | nom abrégé du jour en majuscules (3 caractères en anglais, longueur variable selon la langue) |
| Dy | nom abrégé du jour avec majuscule initiale (3 caractères en anglais, longueur variable selon la langue) |
| dy | nom abrégé du jour en minuscules (3 caractères en anglais, longueur variable selon la langue) |
| DDD | jour de l’année (001–366) |
| IDDD | jour de l’année de numérotation des semaines ISO 8601 (001–371\u00a0; le jour 1 de l’année est le lundi de la première semaine ISO) |
| DD | jour du mois (01–31) |
| D | jour de la semaine, du dimanche (1) au samedi (7) |
| ID | jour de la semaine ISO 8601, du lundi (1) au dimanche (7) |
| W | semaine du mois (1–5) (la première semaine commence le premier jour du mois) |
| WW | numéro de semaine de l’année (1–53) (la première semaine commence le premier jour de l’année) |
| IW | numéro de semaine de l’année de numérotation des semaines ISO 8601 (01–53\u00a0; le premier jeudi de l’année est dans la semaine 1) |
| CC | siècle (2 chiffres) (le vingt et unième siècle commence le 2001-01-01) |
| J | Date julienne (nombre entier de jours depuis le 24 novembre 4714 av. J.-C. à minuit heure locale\u00a0; voir la section B.7) |
| Q | trimestre |
| RM | mois en chiffres romains majuscules (I–XII\u00a0; I=janvier) |
| rm | mois en chiffres romains minuscules (i–xii\u00a0; i=janvier) |
| TZ | abréviation du fuseau horaire en majuscules (prise en charge uniquement dans to_char) |
| tz | abréviation du fuseau horaire en minuscules (prise en charge uniquement dans to_char) |
| TZH | heures du fuseau horaire |
| TZM | minutes du fuseau horaire |
| OF | décalage du fuseau horaire par rapport à UTC (pris en charge uniquement dans to_char) |
Exemples de formatage de dates
Commençons par convertir notre date en une chaîne simple et lisible. Voici comment faire\u00a0:
SELECT order_id, TO_CHAR(order_date, 'DD Mon YYYY') as formatted_date
FROM orders;
Le résultat ressemblerait à ceci\u00a0:
order_id | formatted_date
———+—————-
1 | 13 Jan 2024
2 | 12 Jan 2024
3 | 11 Jan 2024
4 | 10 Jan 2024
5 | 09 Jan 2024
On peut aussi extraire seulement une partie de la date\u00a0:
SELECT order_id, TO_CHAR(order_date, 'Day') as day_of_week
FROM orders;
order_id | day_of_week
———+————-
1 | Friday
2 | Thursday
3 | Wednesday
4 | Tuesday
5 | Monday
On peut même combiner les formats si on veut\u00a0:
SELECT order_id, TO_CHAR(order_date, 'Day, DD Mon YYYY') as detailed_date
FROM orders;
order_id | detailed_date
———+————————
1 | Friday, 13 Jan 2024
2 | Thursday, 12 Jan 2024
3 | Wednesday, 11 Jan 2024
4 | Tuesday, 10 Jan 2024
5 | Monday, 09 Jan 2024
La fonction EXTRACT
La fonction EXTRACT donne facilement accès à toutes les parties possibles d’une valeur date/heure, comme l’année, le mois, le jour, etc.
SELECT order_id, EXTRACT(MONTH from order_date) as order_month
FROM orders;
order_id | order_month
———+————
1 | 1
2 | 1
3 | 1
4 | 1
5 | 1
Voilà les bases du formatage des dates dans PostgreSQL. Ces outils devraient te donner des bases solides pour manipuler des données de date. Comme toujours en programmation, la pratique est essentielle\u00a0: teste ces commandes toi-même et vois ce que tu peux en tirer d’autre. Bon code\u00a0!
Tu devrais vraiment essayer d’exécuter ces requêtes dans Beekeeper Studio. :-)
Beekeeper Studio est une interface de base de données gratuite & open source
Le meilleur outil de requêtes & éditeur SQL que j’aie jamais utilisé. Il m’offre tout ce dont j’ai besoin pour gérer ma base de données. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio est rapide, intuitif et facile à utiliser. Beekeeper prend en charge plein de bases de données et fonctionne parfaitement sous Windows, Mac et Linux.
Ce que les utilisateurs disent de Beekeeper Studio
«\u00a0Beekeeper Studio a complètement remplacé mon ancien workflow SQL. C’est rapide, intuitif, et ça rend le travail sur les bases de données à nouveau agréable.\u00a0»
«\u00a0J’ai essayé beaucoup d’interfaces de base de données, mais Beekeeper trouve l’équilibre parfait entre fonctionnalités et simplicité. Ça marche, tout simplement.\u00a0»