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'
式(extract(year from age(birth_date)) + 1) * interval '1' year
次の誕生日の年齢を(完全な)年で計算します。それを生年月日に追加すると、次の誕生日になります。
実際のdate
を取得するにはキャストが必要です date + interval
であるため、戻る タイムスタンプ(時間を含む)を返します。
where
を削除した場合 条件、あなたはすべての「次の」誕生日を取得します。
また、次の誕生日のリストを取得することもできます。次の30日間は次のようなものを使用します:
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;