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

Jak make_timestamp() funguje v PostgreSQL

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.


  1. Funkce vs uložené procedury

  2. Jak importovat excelový soubor do databáze MySQL

  3. Převést „datetime“ na „smalldatetime“ v SQL Server (příklady T-SQL)

  4. Praktický výběr procesoru pro úlohy SQL Server 2014/2016 OLTP