PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak działa age() w PostgreSQL

W Postgresie age() funkcja zwraca wiek na podstawie dwóch zmiennych znacznika czasu lub daty.

Wynik jest zwracany przy użyciu lat i miesięcy, a nie tylko dni.

Na przykład wynik może wyglądać tak:3 lata 2 pon. 30 dni .

Składnia

Możesz użyć jednej z dwóch następujących składni:

age(timestamp)
age(timestamp, timestamp)

Pierwsza zwraca wiek na podstawie aktualnej daty. W szczególności odejmuje od current_date() (o północy).

Druga składnia pozwala uzyskać datę na podstawie dwóch wyraźnych dat. Użycie tej składni powoduje odjęcie drugiej daty od pierwszej. Innymi słowy, wiek nie jest oparty na dzisiejszej dacie – opiera się na dacie podanej w pierwszym argumencie.

Przykład 1 – Użyj dzisiejszej daty

Oto przykład demonstrujący pierwszą składnię.

SELECT 	age(timestamp '1987-03-14');

Wynik:

33 years 2 mons 30 days

W tym przypadku przedstawiłem jeden argument. age() funkcja następnie odjęła to od dzisiejszej daty (daty, w której uruchomiłem zapytanie) i otrzymaliśmy wynik.

Aby jeszcze bardziej to zademonstrować, oto znowu, ale tym razem wraz z current_date() aby pokazać datę uruchomienia zapytania.

SELECT 	
  current_date,
  age(timestamp '1987-03-14');

Wynik:

 current_date |           age           
--------------+-------------------------
 2020-06-13   | 33 years 2 mons 30 days

Przykład 2 – Użyj niestandardowej daty

W tym przykładzie podaję dwie daty do porównania. Dlatego wiek nie jest oparty na dzisiejszej dacie. Opiera się na pierwszej dacie dostarczonej do age() funkcja.

SELECT age(timestamp '2001-01-01', timestamp '2000-03-14');

Wynik:

9 mons 18 days

W tym przypadku wiek jest krótszy niż rok, więc rok nie jest wymieniony w wynikach.

Oto kolejny przykład, który pokazuje, co się stanie, jeśli zmieni się tylko rok (tj. części miesiąca i dnia dwóch dat są dokładnie takie same, ale rok jest inny).

SELECT age(timestamp '2007-01-01', timestamp '2000-01-01');

Wynik:

7 years

Więc znowu, po prostu pomija części, które nie są istotne (w tym przypadku miesiące i dni).

Przykład 3 – Identyczne daty

Oto, co się stanie, jeśli obie daty są takie same.

SELECT age(timestamp '2001-01-01', timestamp '2001-01-01');

Wynik:

00:00:00

Przykład 4 – Wiek ujemny

Jeśli druga randka jest późniejsza niż pierwsza, kończysz z ujemnym wiekiem.

SELECT age(timestamp '2001-01-01', timestamp '2002-03-07');

Wynik:

-1 years -2 mons -6 days

Tutaj znak minus jest dodany do wszystkich składników daty (tj. składników roku, miesiąca i dni).

Przykład 5 – Wiek w latach

Jeśli chcesz tylko wieku w latach, możesz użyć extract() lub date_part() aby wyodrębnić rok z age() wartość zwracana przez funkcję.

Oto przykład, który używa extract() funkcja:

SELECT extract(year from age(timestamp '1997-10-25'));

Wynik:

22.0

Tak to wygląda, gdy uruchamiam go w Azure Data Studio.

Kiedy uruchamiam go w psql , rozumiem:

22

Oba extract() i date_part() zwracają swoje wyniki przy użyciu typu danych podwójnej precyzji.

W razie potrzeby możesz przekonwertować to na liczbę całkowitą (lub inny typ danych), dołączając do niej ::int .

SELECT extract(year from age(timestamp '1997-10-25'))::int;

Wynik:

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. Czy mogę sprawić, by funkcja plpgsql zwróciła liczbę całkowitą bez użycia zmiennej?

  2. Ukryte funkcje PostgreSQL

  3. Argumenty wiersza poleceń PSQL w skrypcie DO

  4. Jak porównywać tablice w PostgreSQL

  5. Jak replikować tylko WSTAWKI, a nie DELETE/AKTUALIZACJE na węźle Slony Slave?