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

Jak date_trunc() funguje v PostgreSQL

V PostgreSQL, date_trunc() funkce zkrátí hodnotu data/času na zadanou přesnost.

Může také zkrátit hodnotu na zadanou přesnost v určeném časovém pásmu.

Můžete si to představit jako datovou verzi trunc() funkce (která zkracuje čísla).

Syntaxe

Syntaxe vypadá takto:

date_trunc(field, source [, time_zone ])

Kde:

  • field je přesnost, pro kterou se má zkrátit vstupní hodnota (například month , hour , atd). Níže naleznete úplný seznam přijatelných hodnot pro tento argument.
  • source je výraz hodnoty typu timestamp , časové razítko s časovým pásmem nebo interval . Všimněte si, že hodnoty typu date a čas se automaticky přenesou do časového razítka nebo interval , respektive.
  • Volitelné time_zone argument lze zadat pro určení jiného časového pásma.

field argument může být kterýkoli z následujících:

  • mikrosekundy
  • milisekundy
  • za druhé
  • minuta
  • hodinu
  • den
  • týden
  • měsíc
  • čtvrtletí
  • rok
  • desetiletí
  • století
  • tisíciletí

Základní příklad

Zde je příklad k demonstraci.

SELECT date_trunc('hour', timestamp '2020-06-30 17:29:31');

Výsledek:

2020-06-30 17:00:00

Vidíme, že časová část data byla zkrácena z 17:29:31 do 17:00:00 . Je to proto, že jsem použil hour pro první argument.

Zde je s různými hodnotami pro první argument.

\x
SELECT 
  date_trunc('minute', timestamp '2020-06-30 17:29:31'),
  date_trunc('day', timestamp '2020-06-30 17:29:31'),
  date_trunc('month', timestamp '2020-06-30 17:29:31'),
  date_trunc('year', timestamp '2020-06-30 17:29:31');

Výsledek (při použití vertikálního výstupu):

date_trunc | 2020-06-30 17:29:00
date_trunc | 2020-06-30 00:00:00
date_trunc | 2020-06-01 00:00:00
date_trunc | 2020-01-01 00:00:00

V tomto případě jsem použil \x povolit rozšířené zobrazení/vertikální výstup, aby bylo snazší číst výsledky.

S časovým pásmem

Zde je příklad demonstrující WITH TIME ZONE možnost.

SELECT 
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+00'),
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+01');

Výsledek:

date_trunc | 2020-07-01 03:00:00+10
date_trunc | 2020-07-01 02:00:00+10

Místní časové pásmo, když jsem spouštěl tyto příklady, byla Austrálie/Brisbane.

Jako třetí argument můžete také přidat celý název časového pásma.

SELECT 
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+12', 'Pacific/Auckland'),
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+12', 'Pacific/Auckland');

Výsledek:

date_trunc | 2020-06-30 15:00:00+10
date_trunc | 2020-06-30 15:00:00+10

S intervalem

Zde je příklad, který místo data používá hodnotu intervalu.

SELECT date_trunc('hour', interval '7 days 5 hours 15 minutes');

Výsledek:

7 days, 5:00:00


  1. Volání uložené procedury Oracle s výstupním parametrem ze serveru SQL

  2. Tisk tabulky neodpovídá velikosti stránky

  3. Automatické zvýšení v Oracle bez použití spouštěče

  4. Zobrazení obsahu databázového souboru v Android Studio