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