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;