PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como calcular o próximo aniversário dada uma data de nascimento?

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'

A expressão (extract(year from age(birth_date)) + 1) * interval '1' year calcula a idade no próximo aniversário em anos (completos). Ao adicionar isso à data de nascimento, isso dá o próximo aniversário.

O elenco é necessário para obter uma date real de volta, porque date + interval retorna um carimbo de data/hora (incluindo uma hora).

Se você remover o where condição, você receberá todos os "próximos" aniversários.

Você também pode obter uma lista dos próximos aniversários em, por exemplo, nos próximos 30 dias usando algo assim:
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;