DATE_TRUNC() — c'est un outil puissant qui te permet de tronquer des valeurs temporelles à une unité de temps précise. Par exemple, tu peux arrondir un timestamp au début du jour, du mois, de l'année, de l'heure, et ainsi de suite. C'est super utile quand tu analyses des données par période (genre, si tu veux grouper les commandes par jour, mois ou année).
Imagine une date et une heure comme une longue chaîne de texte, où t'as les heures, minutes, secondes. La fonction DATE_TRUNC() prend cette chaîne et "coupe" tout ce qui est en trop, en gardant juste la partie qui t'intéresse. Par exemple :
- Tu veux tronquer la date
2023-10-01 15:30:45au début du jour. Le résultat sera2023-10-01 00:00:00. - Ou tu veux garder juste la première seconde de l'heure, donc
2023-10-01 15:00:00.
Syntaxe
La syntaxe de la fonction DATE_TRUNC() ressemble à ça :
DATE_TRUNC(field, source)
- field — c'est l'unité de temps à laquelle tu veux "couper" la date. Par exemple,
year,month,day,hour,minute. - source — c'est la valeur temporelle que tu veux tronquer. Ça peut être une colonne de type
TIMESTAMPou le résultat d'une autre fonction, genreNOW().
Exemple d'appel simple :
SELECT DATE_TRUNC('day', TIMESTAMP '2023-10-01 15:30:45');
-- Résultat : 2023-10-01 00:00:00
Unités supportées
Voilà une liste de quelques unités de temps que tu peux utiliser avec DATE_TRUNC() :
| Unité de temps | Description |
|---|---|
year |
Début de l'année (par exemple, 2023-01-01 00:00:00) |
quarter |
Début du trimestre (par exemple, 2023-07-01 00:00:00) |
month |
Début du mois (par exemple, 2023-10-01 00:00:00) |
week |
Début de la semaine* (par exemple, 2023-09-25 00:00:00) |
day |
Début du jour (par exemple, 2023-10-01 00:00:00) |
hour |
Début de l'heure (par exemple, 2023-10-01 15:00:00) |
minute |
Début de la minute (par exemple, 2023-10-01 15:30:00) |
second |
Début de la seconde (par exemple, 2023-10-01 15:30:45) |
Plus l'unité de temps est petite, plus le résultat du tronquage sera précis. Au fait, la semaine commence le dimanche :)
Exemples d'utilisation de DATE_TRUNC()
Tronquer au début du jour. Dans cet exemple, on prend un timestamp et on l'arrondit au début du jour :
SELECT DATE_TRUNC('day', TIMESTAMP '2023-10-01 15:30:45') AS truncated_day;
-- Résultat : 2023-10-01 00:00:00
Tronquer au début du mois. Maintenant, on coupe la date au début du mois :
SELECT DATE_TRUNC('month', TIMESTAMP '2023-10-01 15:30:45') AS truncated_month;
-- Résultat : 2023-10-01 00:00:00
Tronquer au début de l'année. Essayons d'arrondir la date au début de l'année :
SELECT DATE_TRUNC('year', TIMESTAMP '2023-10-01 15:30:45') AS truncated_year;
-- Résultat : 2023-01-01 00:00:00
Utilisation avec l'heure actuelle (NOW()). Si tu veux toujours bosser avec la date et l'heure actuelles, tu peux combiner DATE_TRUNC() et NOW() :
SELECT DATE_TRUNC('hour', NOW()) AS truncated_hour;
-- Le résultat dépendra de l'heure actuelle, par exemple : 2023-10-01 15:00:00
Grouper les commandes par mois. Passons à un exemple plus pratique. Disons qu'on a une table avec des commandes, où chaque enregistrement a une date de commande. On veut compter le nombre de commandes par mois :
CREATE TABLE orders (
order_id SERIAL PRIMARY KEY,
order_date TIMESTAMP NOT NULL
);
INSERT INTO orders (order_date) VALUES
('2023-10-01 10:15:00'),
('2023-10-01 15:30:00'),
('2023-09-15 12:45:00'),
('2023-08-20 09:00:00'),
('2023-08-25 10:30:00');
SELECT DATE_TRUNC('month', order_date) AS order_month,
COUNT(*) AS total_orders
FROM orders
GROUP BY order_month
ORDER BY order_month;
Résultat :
| order_month | total_orders |
|---|---|
| 2023-08-01 00:00 | 2 |
| 2023-09-01 00:00 | 1 |
| 2023-10-01 00:00 | 2 |
Cas pratiques d'utilisation
Analyse des données temporelles par période : tu veux savoir combien d'utilisateurs se sont inscrits chaque année, mois ou jour ? Utilise DATE_TRUNC() pour grouper les données.
Création de rapports : bien arrondir le timestamp rend les rapports plus lisibles.
Comparer des dates et heures : si t'as des données temporelles super précises (genre avec des millisecondes), tronque-les au niveau voulu pour comparer correctement.
Erreurs classiques avec DATE_TRUNC()
Utilisation d'unités non supportées. Par exemple, l'unité millisecond n'est pas supportée, et si tu l'utilises, tu vas avoir une erreur.
Mauvais type de données. La fonction DATE_TRUNC() marche seulement avec des types temporels, comme TIMESTAMP. Si tu lui passes une chaîne de caractères, tu vas avoir une erreur.
Erreur d'arrondi. Rappelle-toi que DATE_TRUNC() coupe toujours le temps au début de l'unité de temps indiquée. Si tu veux arrondir le temps, il vaut mieux utiliser d'autres méthodes.
GO TO FULL VERSION