PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách age () hoạt động trong PostgreSQL

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()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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiểu các cột hệ thống trong PostgreSQL

  2. Liquibase / PostgreSQL:Làm thế nào để bảo vệ bảng trường hợp chính xác?

  3. Rails:Triển khai đến Heroku, Nhiều vấn đề

  4. Tự động hóa Barman với Puppet:it2ndq / barman (phần hai)

  5. Bảng lừa cấu hình PostgreSQL