V Postgresu age()
Funkce vrací věk na základě dvou proměnných časového razítka nebo data.
Výsledek se vrátí za roky a měsíce, nikoli jen za dny.
Výsledek může vypadat například takto:3 roky 2 měsíce 30 dní .
Syntaxe
Můžete použít jednu z následujících dvou syntaxí:
age(timestamp)
age(timestamp, timestamp)
První vrátí věk na základě aktuálního data. Konkrétně se odečítá od current_date()
(o půlnoci).
Druhá syntaxe umožňuje získat datum na základě dvou explicitních dat. Použití této syntaxe způsobí, že se druhé datum odečte od prvního. Jinými slovy, věk není založen na dnešním datu – je založen na datu uvedeném v prvním argumentu.
Příklad 1 – Použijte dnešní datum
Zde je příklad pro demonstraci první syntaxe.
SELECT age(timestamp '1987-03-14');
Výsledek:
33 years 2 mons 30 days
V tomto případě jsem uvedl jediný argument. age()
funkce to pak odečetla od dnešního data (datu, kdy jsem spustil dotaz) a dostaneme výsledek.
Abychom to dále demonstrovali, zde je to znovu, ale tentokrát spolu s current_date()
zobrazit datum spuštění dotazu.
SELECT
current_date,
age(timestamp '1987-03-14');
Výsledek:
current_date | age --------------+------------------------- 2020-06-13 | 33 years 2 mons 30 days
Příklad 2 – Použití vlastního data
V tomto příkladu uvádím dvě data k porovnání. Věk proto není založen na dnešním datu. Je založeno na prvním datu poskytnutém age()
funkce.
SELECT age(timestamp '2001-01-01', timestamp '2000-03-14');
Výsledek:
9 mons 18 days
V tomto případě je věk méně než rok, takže rok není ve výsledcích uveden.
Zde je další příklad, který ukazuje, co se stane, pokud se změní pouze rok (tj. část měsíce a dne dvou dat jsou úplně stejné, ale rok je jiný).
SELECT age(timestamp '2007-01-01', timestamp '2000-01-01');
Výsledek:
7 years
Opět tedy jednoduše vynechává části, které nejsou relevantní (v tomto případě měsíce a dny).
Příklad 3 – Identická data
Co se stane, pokud jsou obě data stejná.
SELECT age(timestamp '2001-01-01', timestamp '2001-01-01');
Výsledek:
00:00:00
Příklad 4 – Negativní věk
Pokud je druhé datum pozdější než první, skončíte se záporným věkem.
SELECT age(timestamp '2001-01-01', timestamp '2002-03-07');
Výsledek:
-1 years -2 mons -6 days
Zde je znaménko mínus předřazeno všem složkám data (tj. rok, měsíc a dny).
Příklad 5 – Věk v letech
Pokud chcete pouze věk v letech, můžete použít buď extract()
nebo date_part()
extrahovat rok z age()
návratová hodnota funkce.
Zde je příklad, který používá extract()
funkce:
SELECT extract(year from age(timestamp '1997-10-25'));
Výsledek:
22.0
Takhle to vypadá, když to spustím v Azure Data Studio.
Když to spustím v psql , chápu toto:
22
Oba extract()
a date_part()
vrátí své výsledky pomocí datového typu s dvojitou přesností.
V případě potřeby můžete toto číslo převést na celé číslo (nebo jiný datový typ) tak, že jej připojíte pomocí ::int
.
SELECT extract(year from age(timestamp '1997-10-25'))::int;
Výsledek:
22