PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie berechnet man den nächsten Geburtstag bei einem Geburtsdatum?

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'

Der Ausdruck (extract(year from age(birth_date)) + 1) * interval '1' year berechnet das Alter beim nächsten Geburtstag in (ganzen) Jahren. Addiert man das zum Geburtsdatum, ergibt sich der nächste Geburtstag.

Die Besetzung ist notwendig, um ein echtes date zu erhalten zurück, weil date + interval gibt einen Zeitstempel zurück (einschließlich einer Uhrzeit).

Wenn Sie das where entfernen Bedingung erhalten Sie alle "nächsten" Geburtstage.

Sie können auch eine Liste der bevorstehenden Geburtstage erhalten, z. die nächsten 30 Tage, indem Sie etwa so vorgehen:

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;