PostgreSQL - Fonctions et Opérateurs DATE/TIME

Bonjour, aspirants programmeurs ! Aujourd'hui, nous allons entreprendre un voyage passionnant à travers le monde des dates et des heures dans PostgreSQL. En tant que votre enseignant de science informatique de quartier, je suis là pour vous guider à travers ces concepts avec la même enthousiasme que j'ai eu depuis 15 ans dans la classe. Alors, prenez vos carnets virtuels, et plongons dedans !

Date/Time Functions & Operators

Comprendre les Dates et Heures dans PostgreSQL

Avant de commencer à explorer les fonctions et les opérateurs, penchons-nous un moment sur pourquoi les dates et les heures sont si cruciales dans la programmation. Imaginez que vous construisiez une machine à temps (ça ne serait pas génial ?). Vous devriez savoir exactement où vous êtes et où (ou quand) vous voulez aller. C'est essentiellement ce que nous faisons avec les bases de données - nous suivons quand les choses se passent, combien de temps elles durent, et même prévoir des événements futurs.

Maintenant, regardons certaines des fonctions et des opérateurs les plus utiles pour les dates et les heures dans PostgreSQL.

AGE(timestamp, timestamp) et AGE(timestamp)

La fonction AGE est comme ce ami qui se souvient toujours combien de temps s'est écoulé depuis quelque chose. Elle calcule la différence entre deux timestamps ou entre un timestamp et la date actuelle.

Exemple 1 : Calculer l'Age

SELECT AGE(TIMESTAMP '2023-05-15', TIMESTAMP '1990-01-01');

Cela renverra quelque chose comme :

33 ans 4 mois 14 jours

Que se passe-t-il ici ? Nous demandons à PostgreSQL de calculer la différence de temps entre le 1er janvier 1990 et le 15 mai 2023. C'est comme demander : "Quel âge aurait quelqu'un s'il était né le 1er janvier 1990 ?"

Exemple 2 : Calculer l'Age à partir de la Date Actuelle

SELECT AGE(TIMESTAMP '1990-01-01');

Cela renverra la différence de temps entre le 1er janvier 1990 et la date actuelle. C'est comme demander : "Quel âge a quelqu'un né le 1er janvier 1990 ?"

Fonctions DATE/TIME Actuelles

Ces fonctions sont comme l'horloge et le calendrier intégrés de votre base de données. Elles vous disent quel est l'heure actuelle.

Exemple 3 : Obtenir la Date et l'Heure Actuelle

SELECT CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP;

Cela renverra la date d'aujourd'hui, l'heure actuelle, et les deux combinés. C'est comme demander à votre base de données : "Quelle est la date aujourd'hui, quelle heure est-il, et quel est le moment exact maintenant ?"

Fonctions DATE_PART et DATE_TRUNC

DATE_PART est comme une machine à temps qui peut zoomer sur des parties spécifiques d'une date ou d'une heure. DATE_TRUNC, d'autre part, est comme un simplificateur de temps - il arrondit vers le bas à une unité de temps spécifiée.

Exemple 4 : Extraire des Parties d'une Date

SELECT DATE_PART('year', TIMESTAMP '2023-05-15 10:30:00');
SELECT DATE_PART('hour', TIMESTAMP '2023-05-15 10:30:00');

La première requête renverra 2023, et la seconde renverra 10. C'est comme demander : "De quelle année provient cette date-heure ?" et "À quelle heure de la journée est cette date-heure ?"

Exemple 5 : Tronquer un Timestamp

SELECT DATE_TRUNC('hour', TIMESTAMP '2023-05-15 10:30:00');

Cela renverra '2023-05-15 10:00:00'. C'est comme dire : "Donnez-moi cette date-heure, mais réinitialisez les minutes et les secondes à zéro."

Fonction EXTRACT

EXTRACT est similaire à DATE_PART, mais avec une syntaxe légèrement différente. C'est un autre moyen d'extraire des parties spécifiques d'une date ou d'une heure.

Exemple 6 : Extraire d'un Timestamp

SELECT EXTRACT(YEAR FROM TIMESTAMP '2023-05-15 10:30:00');
SELECT EXTRACT(HOUR FROM TIMESTAMP '2023-05-15 10:30:00');

Ces requêtes renverront 2023 et 10 respectivement, tout comme nos exemples DATE_PART.

Fonctions ISFINITE

Ces fonctions sont comme le test de réalité de votre base de données. Elles vous disent si une date, un timestamp ou un intervalle est une valeur réelle et finie ou l'un de ces valeurs spéciales d'infini.

Exemple 7 : Vérifier la Finitude

SELECT ISFINITE(DATE '2023-05-15');
SELECT ISFINITE(TIMESTAMP 'infinity');

La première requête renverra true, tandis que la seconde renverra false. C'est comme demander : "Est-ce que le 15 mai 2023 est une date réelle ?" (oui) et "Est-ce que 'infini' est un timestamp réel ?" (non).

Fonctions JUSTIFY

Ces fonctions sont comme les ajusteurs de temps de votre base de données. Elles prennent des intervalles qui pourraient avoir des valeurs étranges et les ajustent à des représentations plus standard.

Exemple 8 : Ajuster les Intervales

SELECT JUSTIFY_DAYS(INTERVAL '30 days');
SELECT JUSTIFY_HOURS(INTERVAL '36 hours');
SELECT JUSTIFY_INTERVAL(INTERVAL '1 month 36 hours');

Ceux-ci pourraient renvoyer :

1 mois
1 jour 12 heures
1 mois 1 jour 12 heures

C'est comme dire : "Prenez ces périodes de temps et exprimez-les de manière plus standard."

Résumé des Fonctions

Voici un tableau pratique résumant toutes les fonctions que nous avons discutées :

Fonction Description
AGE() Calcule la différence entre des timestamps
CURRENT_DATE Retourne la date actuelle
CURRENT_TIME Retourne l'heure actuelle
CURRENT_TIMESTAMP Retourne la date et l'heure actuelle
DATE_PART() Extrait une partie spécifique d'une date/heure
DATE_TRUNC() Tronque un timestamp à une précision spécifiée
EXTRACT() Extrait un champ spécifique d'une date/heure
ISFINITE() Vérifie si une date/heure/intervalle est fini
JUSTIFY_DAYS() Ajuste les jours dans un intervalle
JUSTIFY_HOURS() Ajuste les heures dans un intervalle
JUSTIFY_INTERVAL() Ajuste un intervalle entier

Et voilà, les amis ! Nous avons voyagé à travers le temps (fonctions) ensemble, extrait des morceaux de dates, vérifié la finitude de l'infini, et même ajusté des intervalles. Souvenez-vous, travailler avec des dates et des heures dans les bases de données est crucial pour de nombreuses applications, de la suivi de l'activité des utilisateurs à la planification des événements.

Alors, continuez à pratiquer, continuez à explorer, et avant que vous ne vous en rendiez compte, vous serez un seigneur du temps du monde des bases de données !

Credits: Image by storyset