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

Come funziona make_time() in PostgreSQL

In PostgreSQL, il make_time() La funzione consente di creare un'ora dai suoi campi di ore, minuti e secondi.

Sintassi

La funzione ha la seguente sintassi:

make_time(hour int, min int, sec double precision)

Dove 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 ora . Più precisamente, viene restituito come ora senza fuso orario .

Esempio

Ecco un esempio di base da dimostrare.

SELECT make_time(7, 45, 15.08);

Risultato:

07:45:15.08

E possiamo verificare il tipo restituito con la seguente query.

SELECT pg_typeof(make_time(7, 45, 15.08));

Risultato:

time without time zone

Il pg_typeof() function restituisce il tipo di dati del suo argomento, quindi ho passato make_time() 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_time(25, 45, 15.08);

Risultato:

ERROR: time field value out of range: 25:45:15.08

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_time('7', '45', '15.08');

Risultato:

07:45:15.08

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

SELECT pg_typeof(make_time('7', '45', '15.08'));

Risultato:

time without time zone

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

SELECT make_time('25', '45', '15.08');

Risultato:

ERROR: time field value out of range: 25:45:15.08