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');