PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment age() fonctionne dans PostgreSQL

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