Hãy thử:
date_part('year',age(coalesce(d1,current_date), d2))::int;
age(d1,d2) hàm trả về số năm, tháng và ngày giữa hai ngày ở định dạng sau:
xxx year(s) xxx mon(s) xxx day(s).
từ đầu ra này bằng cách sử dụng date_part() để chọn sự khác biệt duy nhất trong năm. và cũng không cần đặt câu lệnh if để xử lý NULL như tôi đã thêm coalesece trả về đầu tiên NON Null giá trị, Vì vậy, nếu d1 là NULL nó trả về cuurent_date
Cấu trúc chức năng:
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;
Gọi hàm:
select * from diff(null,'2010-04-01');
select * from diff('2012-10-01','2010-04-01');