Coba :
date_part('year',age(coalesce(d1,current_date), d2))::int;
age(d1,d2) fungsi mengembalikan jumlah tahun, bulan, dan hari antara dua tanggal dalam format berikut:
xxx year(s) xxx mon(s) xxx day(s).
dari output ini menggunakan date_part() untuk memilih satu-satunya perbedaan tahun. dan juga tidak perlu meletakkan pernyataan if untuk menangani NULL karena saya telah menambahkan coalesece yang mengembalikan NON Null first nilai, Jadi jika d1 adalah NULL itu mengembalikan cuurent_date
Struktur Fungsi:
CREATE OR REPLACE FUNCTION diff(d1 date,d2 date) RETURNS int AS $$
BEGIN
RETURN date_part('year',age(coalesce(d1,current_date), d2))::int;
END
$$ language plpgsql;
Panggilan Fungsi:
select * from diff(null,'2010-04-01');
select * from diff('2012-10-01','2010-04-01');