V PostgreSQL, make_timestamptz()
funkce umožňuje vytvořit časové razítko s časovým pásmem z jeho polí pro rok, měsíc, den, hodinu, minutu a sekundy a také z volitelného pole časového pásma.
Syntaxe
Funkce má následující syntaxi:
make_timestamptz(year int, month int, day int, hour int, min int, sec double precision, [ timezone text ])
Kde year
, month
a day
jsou celá čísla představující rok, měsíc a den data a hour
je hodinová část, min
je minutová část a sec
je druhá část.
Hodiny a minuty jsou uvedeny jako celé číslo , sekundy jsou poskytovány s dvojitou přesností .
Volitelné timezone
argument je pro časové pásmo. Pokud není zadáno, použije se aktuální časové pásmo.
Výsledek je vrácen jako čas s časovým pásmem .
Příklad
Zde je základní příklad k demonstraci.
SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15);
Výsledek:
1999-03-14 10:35:12.15+10
V tomto případě jsem nezadal časové pásmo, takže bylo použito aktuální časové pásmo.
Návratový typ můžeme ověřit pomocí následujícího dotazu.
SELECT pg_typeof(make_timestamptz(1999, 03, 14, 10, 35, 12.15));
Výsledek:
timestamp with time zone
pg_typeof()
funkce vrací datový typ svého argumentu, a tak jsem předal make_timestamptz()
jako argument.
Zadejte časové pásmo
V tomto příkladu explicitně uvádím časové pásmo.
SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15, 'Indian/Mauritius');
Výsledek:
1999-03-14 16:35:12.15+10
Zde je další příklad, ale s různými hodnotami časového pásma.
\x
SELECT
make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACDT'),
make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACST'),
make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACT'),
make_timestamptz(2000, 01, 01, 00, 01, 00.00, '+01'),
make_timestamptz(2000, 01, 01, 00, 01, 00.00, '-01'),
make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'NZ');
Výsledek (při použití vertikálního výstupu):
make_timestamptz | 1999-12-31 23:31:00+10 make_timestamptz | 2000-01-01 00:31:00+10 make_timestamptz | 2000-01-01 15:01:00+10 make_timestamptz | 2000-01-01 09:01:00+10 make_timestamptz | 2000-01-01 11:01:00+10 make_timestamptz | 1999-12-31 21:01:00+10
V tomto příkladu jsem použil \x
pro umožnění rozšířeného zobrazení (také známého jako „vertikální výstup“), aby byly výsledky lépe čitelné.
Zadání \x
přepíná rozšířené zobrazení (tj. povoluje a zakazuje jej).
Seznam platných časových pásem naleznete v části Návrat seznamu časových pásem podporovaných PostgreSQL.
Mimo rozsah
Pokud je některý z argumentů mimo rozsah možných hodnot pro jeho datovou část, zobrazí se chyba „mimo rozsah“.
SELECT make_timestamptz(1999, 03, 32, 10, 35, 12.15);
Výsledek:
ERROR: date field value out of range: 1999-03-32
V tomto případě byl den 32, což je mimo rozsah, a tak zpráva vysvětlila, že hodnota pole data byla mimo rozsah.
Pokud je mimo rozsah pouze hodnota časového pole, bude chyba formulována odpovídajícím způsobem.
SELECT make_timestamptz(1999, 03, 30, 10, 61, 12.15);
Výsledek:
ERROR: time field value out of range: 10:61:12.15
V tomto případě minutes
argument je 61, což je mimo rozsah.
Časové razítko bez časového pásma
Chcete-li vytvořit časové razítko bez časového pásma, použijte make_timestamp()
funkce.