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

Come funziona make_timestamp() in PostgreSQL

In PostgreSQL, il make_timestamp() la funzione ti consente di creare un timestamp dai suoi campi anno, mese, giorno, ora, minuti e secondi.

Sintassi

La funzione ha la seguente sintassi:

make_timestamp(year int, month int, day int, hour int, min int, sec double precision)

Dove year , month e day sono numeri interi che rappresentano l'anno, il mese e il giorno della data e l'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 risultato viene restituito come timestamp . Più precisamente, viene restituito come ora senza fuso orario .

Esempio

Ecco un esempio di base da dimostrare.

SELECT make_timestamp(2020, 10, 25, 9, 30, 17.12);

Risultato:

2020-10-25 09:30:17.12

E possiamo verificare il tipo restituito con la seguente query.

SELECT pg_typeof(make_timestamp(2020, 10, 25, 9, 30, 17.12));

Risultato:

timestamp without time zone

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

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_timestamp(2020, 13, 25, 9, 30, 17.12);

Risultato:

ERROR: date field value out of range: 2020-13-25

In questo caso il mese era fuori intervallo, quindi il messaggio spiegava che il valore del campo della data era fuori intervallo.

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

SELECT make_timestamp(2020, 10, 25, 25, 30, 17.12);

Risultato:

ERROR: time field value out of range: 25:30:17.12

Passare le stringhe come argomenti

La documentazione di Postgres afferma che gli argomenti devono essere interi (e doppia precisione nel caso dei seconds argomento), ma anche il passaggio di stringhe funziona (probabilmente perché vengono convertite implicitamente in numeri interi), purché ogni argomento rientri nell'intervallo corretto.

SELECT make_timestamp('2020', '12', '25', '10', '30', '17.12');

Risultato:

2020-12-25 10:30:17.12

Ancora una volta possiamo usare pg_type() per verificare il tipo di dati risultante.

SELECT pg_typeof(make_timestamp('2020', '12', '25', '10', '30', '17.12'));

Risultato:

timestamp without time zone

Tuttavia, devi comunque assicurarti che ogni argomento sia valido una volta convertito in un numero intero, altrimenti riceverai un errore.

SELECT pg_typeof(make_timestamp('2020', '13', '25', '10', '30', '17.12'));

Risultato:

ERROR: date field value out of range: 2020-13-25

Timestamp con fuso orario

Per creare un indicatore orario con fuso orario valore, usa il make_timestamptz() funzione.