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

Jak make_timestamptz() funguje v PostgreSQL

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.


  1. Řešení pro limit Access 255 Columns Limit

  2. Jak získat měsíc z data v MySQL

  3. Jak se připojit k více sloupcům

  4. Java JDBC:data konzistentně dva dny volna