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