V PostgreSQL, make_timestamp()
Funkce vám umožňuje vytvořit časové razítko z jeho polí roku, měsíce, dne, hodiny, minuty a sekundy.
Syntaxe
Funkce má následující syntaxi:
make_timestamp(year int, month int, day int, hour int, min int, sec double precision)
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í .
Výsledek je vrácen jako časové razítko . Přesněji řečeno, je to vráceno jako čas bez časového pásma .
Příklad
Zde je základní příklad k demonstraci.
SELECT make_timestamp(2020, 10, 25, 9, 30, 17.12);
Výsledek:
2020-10-25 09:30:17.12
A návratový typ můžeme ověřit pomocí následujícího dotazu.
SELECT pg_typeof(make_timestamp(2020, 10, 25, 9, 30, 17.12));
Výsledek:
timestamp without time zone
pg_typeof()
funkce vrací datový typ svého argumentu, a tak jsem předal make_timestamp()
jako argument..
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_timestamp(2020, 13, 25, 9, 30, 17.12);
Výsledek:
ERROR: date field value out of range: 2020-13-25
V tomto případě byl měsíc mimo rozsah, a tak zpráva vysvětlila, že hodnota pole data je mimo rozsah.
Pokud je mimo rozsah pouze hodnota časového pole, bude chyba formulována odpovídajícím způsobem.
SELECT make_timestamp(2020, 10, 25, 25, 30, 17.12);
Výsledek:
ERROR: time field value out of range: 25:30:17.12
Předávání řetězců jako argumentů
Dokumentace Postgres uvádí, že argumenty musí být celá čísla (a dvojnásobná přesnost v případě seconds
argument), ale funguje také předávání řetězců (pravděpodobně proto, že jsou implicitně převedeny na celá čísla), pokud je každý argument ve správném rozsahu.
SELECT make_timestamp('2020', '12', '25', '10', '30', '17.12');
Výsledek:
2020-12-25 10:30:17.12
Opět můžeme použít pg_type()
pro kontrolu výsledného datového typu.
SELECT pg_typeof(make_timestamp('2020', '12', '25', '10', '30', '17.12'));
Výsledek:
timestamp without time zone
Stále se však musíte ujistit, že každý argument bude platný po převedení na celé číslo, jinak se zobrazí chyba.
SELECT pg_typeof(make_timestamp('2020', '13', '25', '10', '30', '17.12'));
Výsledek:
ERROR: date field value out of range: 2020-13-25
Časové razítko s časovým pásmem
Chcete-li vytvořit časové razítko s časovým pásmem hodnotu, použijte make_timestamptz()
funkce.