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říkladmonth
,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