sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo calcular el próximo cumpleaños dada una fecha de nacimiento?

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'

La expresión (extract(year from age(birth_date)) + 1) * interval '1' year calcula la edad en el próximo cumpleaños en años (completos). Al agregar eso a la fecha de nacimiento, esto da el próximo cumpleaños.

El elenco es necesario para obtener una date real atrás, porque date + interval devuelve una marca de tiempo (incluida una hora).

Si elimina el where condición, obtendrá todos los "próximos" cumpleaños.

También puede obtener una lista de los próximos cumpleaños en, p. los próximos 30 días usando algo como esto:

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;