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

Comment calculer le prochain anniversaire étant donné une date de naissance?

select birth_date,
       cast(birth_date + ((extract(year from age(birth_date)) + 1) * interval '1' year) as date) as next_birthday
from person
where name = 'Bob'

L'expression (extract(year from age(birth_date)) + 1) * interval '1' year calcule l'âge au prochain anniversaire en années (complètes). En ajoutant cela à la date de naissance, cela donne le prochain anniversaire.

Le casting est nécessaire pour obtenir une vraie date retour, car date + interval renvoie un horodatage (incluant une heure).

Si vous supprimez le where condition, vous aurez tous les "prochains" anniversaires.

Vous pouvez également obtenir une liste des anniversaires à venir, par ex. les 30 prochains jours en utilisant quelque chose comme ceci :

select next_birthday,
       next_birthday - current_date as days_until_next
from (
  select birth_date,
         cast(birth_date + ((extract(year from age(birth_date)) + 1) * interval '1' year) as date) as next_birthday
  from person
) as upcoming
where upcoming.next_birthday <= current_date + 30
order by next_birthday;