Dans Postgres, le age()
La fonction renvoie l'âge en fonction de deux variables d'horodatage ou de date.
Le résultat est renvoyé en utilisant des années et des mois, plutôt que des jours seulement.
Par exemple, un résultat pourrait ressembler à ceci :3 ans 2 mois 30 jours .
Syntaxe
Vous pouvez utiliser l'une des deux syntaxes suivantes :
age(timestamp)
age(timestamp, timestamp)
Le premier renvoie l'âge en fonction de la date actuelle. Plus précisément, il soustrait de current_date()
(à minuit).
La deuxième syntaxe vous permet d'obtenir la date en fonction de deux dates explicites. L'utilisation de cette syntaxe entraîne la soustraction de la deuxième date de la première. En d'autres termes, l'âge n'est pas basé sur la date d'aujourd'hui - il est basé sur la date fournie dans le premier argument.
Exemple 1 - Utiliser la date d'aujourd'hui
Voici un exemple pour illustrer la première syntaxe.
SELECT age(timestamp '1987-03-14');
Résultat :
33 years 2 mons 30 days
Dans ce cas, j'ai fourni un seul argument. L'age()
fonction a ensuite soustrait cela de la date d'aujourd'hui (la date à laquelle j'ai exécuté la requête) et nous obtenons le résultat.
Juste pour démontrer cela davantage, le voici à nouveau, mais cette fois à côté de current_date()
pour afficher la date à laquelle j'ai exécuté la requête.
SELECT
current_date,
age(timestamp '1987-03-14');
Résultat :
current_date | age --------------+------------------------- 2020-06-13 | 33 years 2 mons 30 days
Exemple 2 – Utiliser une date personnalisée
Dans cet exemple, je fournis deux dates avec lesquelles comparer. Par conséquent, l'âge n'est pas basé sur la date d'aujourd'hui. Il est basé sur la première date fournie à age()
fonction.
SELECT age(timestamp '2001-01-01', timestamp '2000-03-14');
Résultat :
9 mons 18 days
Dans ce cas, l'âge est inférieur à un an et l'année n'est donc pas mentionnée dans les résultats.
Voici un autre exemple qui montre ce qui se passe si seule l'année change (c'est-à-dire que les parties mois et jour des deux dates sont exactement les mêmes, mais l'année est différente).
SELECT age(timestamp '2007-01-01', timestamp '2000-01-01');
Résultat :
7 years
Encore une fois, il omet simplement les parties qui ne sont pas pertinentes (dans ce cas, les mois et les jours).
Exemple 3 – Dates identiques
Voici ce qui se passe si les deux dates sont identiques.
SELECT age(timestamp '2001-01-01', timestamp '2001-01-01');
Résultat :
00:00:00
Exemple 4 - Âge négatif
Si la deuxième date est postérieure à la première, vous vous retrouvez avec un âge négatif.
SELECT age(timestamp '2001-01-01', timestamp '2002-03-07');
Résultat :
-1 years -2 mons -6 days
Ici, le signe moins est ajouté au début de tous les composants de la date (c'est-à-dire les composants année, mois et jours).
Exemple 5 - Âge en années
Si vous ne voulez que l'âge en années, vous pouvez utiliser soit extract()
ou date_part()
pour extraire l'année du age()
valeur de retour de la fonction.
Voici un exemple qui utilise le extract()
fonction :
SELECT extract(year from age(timestamp '1997-10-25'));
Résultat :
22.0
C'est ainsi qu'il apparaît lorsque je l'exécute dans Azure Data Studio.
Quand je l'exécute en psql , j'obtiens ceci :
22
Les deux extract()
et date_part()
renvoient leurs résultats en utilisant le type de données double précision.
Vous pouvez le convertir en entier (ou autre type de données) si nécessaire, en l'ajoutant avec ::int
.
SELECT extract(year from age(timestamp '1997-10-25'))::int;
Résultat :
22