PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come funziona make_timestamptz() in PostgreSQL

In PostgreSQL, il make_timestamptz() la funzione ti consente di creare un timestamp con fuso orario dai campi anno, mese, giorno, ora, minuti e secondi, oltre a un campo fuso orario facoltativo.

Sintassi

La funzione ha la seguente sintassi:

make_timestamptz(year int, month int, day int, hour int, min int, sec double precision, [ timezone text ])

Dove year , month e day sono numeri interi che rappresentano l'anno, il mese e il giorno della data e hour è la parte dell'ora, min è la parte dei minuti e sec è la seconda parte.

L'ora ei minuti sono forniti come un numero intero , i secondi sono forniti come doppia precisione .

Il timezone opzionale argomento è per il fuso orario. Se non è specificato, viene utilizzato il fuso orario corrente.

Il risultato viene restituito come ora con fuso orario .

Esempio

Ecco un esempio di base da dimostrare.

SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15);

Risultato:

1999-03-14 10:35:12.15+10

In questo caso non ho fornito un fuso orario, quindi ha utilizzato il fuso orario corrente.

Possiamo verificare il tipo restituito con la seguente query.

SELECT pg_typeof(make_timestamptz(1999, 03, 14, 10, 35, 12.15));

Risultato:

timestamp with time zone

Il pg_typeof() function restituisce il tipo di dati del suo argomento, quindi ho passato make_timestamptz() come argomento.

Specifica un fuso orario

In questo esempio fornisco esplicitamente un fuso orario.

SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15, 'Indian/Mauritius');

Risultato:

1999-03-14 16:35:12.15+10

Ecco un altro esempio, ma con vari valori di fuso orario.

\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');

Risultato (usando l'output verticale):

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

In questo esempio ho usato \x per abilitare la visualizzazione estesa (nota anche come "output verticale") al fine di facilitare la lettura dei risultati.

Inserimento di \x attiva o disattiva la visualizzazione espansa (ossia lo abilita e lo disabilita).

Consulta Restituire un elenco di fusi orari supportati da PostgreSQL per ottenere un elenco di fusi orari validi.

Fuori portata

Se uno qualsiasi degli argomenti non rientra nell'intervallo dei possibili valori per la sua parte relativa alla data, verrà visualizzato un errore "fuori intervallo".

SELECT make_timestamptz(1999, 03, 32, 10, 35, 12.15);

Risultato:

ERROR: date field value out of range: 1999-03-32

In questo caso il giorno era 32, che è fuori dall'intervallo, e quindi il messaggio spiegava che il valore del campo della data era fuori dall'intervallo.

Se solo il valore del campo dell'ora è fuori intervallo, l'errore viene formulato di conseguenza.

SELECT make_timestamptz(1999, 03, 30, 10, 61, 12.15);

Risultato:

ERROR: time field value out of range: 10:61:12.15

In questo caso i minutes l'argomento è 61, che è fuori intervallo.

Timestamp senza fuso orario

Per creare un timestamp senza un fuso orario, usa make_timestamp() funzione.