PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come calcolare il prossimo compleanno data una data di nascita?

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'espressione (extract(year from age(birth_date)) + 1) * interval '1' year calcola l'età al prossimo compleanno in anni (completi). Quando lo aggiungi alla data di nascita, questo dà il compleanno successivo.

Il cast è necessario per ottenere una vera date indietro, perché date + interval restituisce un timestamp (incluso un orario).

Se rimuovi where condizione, riceverai tutti i "prossimi" compleanni.

Puoi anche ottenere un elenco dei compleanni imminenti ad es. nei prossimi 30 giorni utilizzando qualcosa del genere:

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;