Trong Postgres, age()
hàm trả về tuổi dựa trên hai biến dấu thời gian hoặc ngày.
Kết quả được trả về bằng cách sử dụng năm và tháng, thay vì chỉ ngày.
Ví dụ:kết quả có thể giống như sau: 3 năm 2 gió 30 ngày .
Cú pháp
Bạn có thể sử dụng một trong hai cú pháp sau:
age(timestamp)
age(timestamp, timestamp)
Cái đầu tiên trả về tuổi dựa trên ngày hiện tại. Cụ thể, nó trừ đi từ current_date()
(vào lúc nửa đêm).
Cú pháp thứ hai cho phép bạn lấy ngày dựa trên hai ngày rõ ràng. Sử dụng cú pháp này làm cho ngày thứ hai bị trừ đi ngày đầu tiên. Nói cách khác, tuổi không dựa trên ngày hôm nay - nó dựa trên ngày được cung cấp trong đối số đầu tiên.
Ví dụ 1 - Sử dụng Ngày hôm nay
Dưới đây là một ví dụ để minh họa cú pháp đầu tiên.
SELECT age(timestamp '1987-03-14');
Kết quả:
33 years 2 mons 30 days
Trong trường hợp này, tôi đã cung cấp một đối số duy nhất. age()
sau đó hàm trừ đi số đó từ ngày hôm nay (ngày tôi chạy truy vấn) và chúng tôi nhận được kết quả.
Chỉ để chứng minh thêm điều này, đây là một lần nữa, nhưng lần này cùng với current_date()
để hiển thị ngày tôi chạy truy vấn.
SELECT
current_date,
age(timestamp '1987-03-14');
Kết quả:
current_date | age --------------+------------------------- 2020-06-13 | 33 years 2 mons 30 days
Ví dụ 2 - Sử dụng Ngày tùy chỉnh
Trong ví dụ này, tôi cung cấp hai ngày để so sánh. Do đó, tuổi không dựa trên ngày của ngày hôm nay. Nó dựa trên ngày đầu tiên được cung cấp cho age()
chức năng.
SELECT age(timestamp '2001-01-01', timestamp '2000-03-14');
Kết quả:
9 mons 18 days
Trong trường hợp này, tuổi nhỏ hơn một năm nên năm đó không được đề cập trong kết quả.
Dưới đây là một ví dụ khác cho thấy điều gì sẽ xảy ra nếu chỉ thay đổi năm (tức là phần tháng và ngày của hai ngày hoàn toàn giống nhau, nhưng năm thì khác).
SELECT age(timestamp '2007-01-01', timestamp '2000-01-01');
Kết quả:
7 years
Vì vậy, một lần nữa, nó chỉ đơn giản là bỏ qua những phần không liên quan (trong trường hợp này là tháng và ngày).
Ví dụ 3 - Ngày giống hệt nhau
Đây là những gì sẽ xảy ra nếu cả hai ngày đều giống nhau.
SELECT age(timestamp '2001-01-01', timestamp '2001-01-01');
Kết quả:
00:00:00
Ví dụ 4 - Độ tuổi phủ định
Nếu ngày thứ hai muộn hơn ngày đầu tiên, bạn sẽ có độ tuổi âm.
SELECT age(timestamp '2001-01-01', timestamp '2002-03-07');
Kết quả:
-1 years -2 mons -6 days
Ở đây, dấu trừ được thêm vào trước tất cả các thành phần của ngày (tức là các thành phần năm, tháng và ngày).
Ví dụ 5 - Tuổi tính theo năm
Nếu bạn chỉ muốn tuổi tính bằng năm, bạn có thể sử dụng extract()
hoặc date_part()
để trích xuất năm từ age()
giá trị trả về của hàm.
Dưới đây là một ví dụ sử dụng extract()
chức năng:
SELECT extract(year from age(timestamp '1997-10-25'));
Kết quả:
22.0
Đó là cách nó xuất hiện khi tôi chạy nó trong Azure Data Studio.
Khi tôi chạy nó trong psql , Tôi nhận được cái này:
22
Cả extract()
và date_part()
trả về kết quả của họ bằng cách sử dụng kiểu dữ liệu độ chính xác kép.
Bạn có thể chuyển đổi dữ liệu này thành một số nguyên (hoặc kiểu dữ liệu khác) nếu được yêu cầu, bằng cách thêm nó bằng ::int
.
SELECT extract(year from age(timestamp '1997-10-25'))::int;
Kết quả:
22