sql >> Databáze >  >> RDS >> PostgreSQL

Jak age() funguje v PostgreSQL

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

  1. MySQL – Chyba připojení – [MySQL][Ovladač ODBC 5.3(w)]Hostitel „IP“ se nemůže připojit k tomuto serveru MySQL

  2. SQL rozdělený řádek oddělený čárkou

  3. SQL ALTER DATABASE Syntaxe – uvedena v DBMS

  4. Databáze, která zvládne více než 500 milionů řádků