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'
Ekspresi (extract(year from age(birth_date)) + 1) * interval '1' year menghitung usia pada ulang tahun berikutnya dalam (lengkap) tahun. Saat menambahkannya ke tanggal lahir, ini memberikan ulang tahun berikutnya.
Pemeran diperlukan untuk mendapatkan date yang sebenarnya kembali, karena date + interval mengembalikan stempel waktu (termasuk waktu).
Jika Anda menghapus where kondisi, Anda akan mendapatkan semua ulang tahun "berikutnya".
Anda juga bisa mendapatkan daftar ulang tahun yang akan datang di mis. 30 hari ke depan menggunakan sesuatu seperti ini:
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;