Problema:
Vorresti ottenere la data e l'ora correnti con le informazioni sul fuso orario da un database PostgreSQL.
Soluzione:
Useremo CURRENT_TIMESTAMP o NOW() per ottenere la data e l'ora correnti con l'offset del fuso orario.
SELECT CURRENT_TIMESTAMP ;
Ecco il risultato della query:
2019-09-15 13:13:12.118432+02
Discussione:
CURRENT_TIMESTAMP
restituisce la data, l'ora e l'offset del fuso orario correnti (usando la data, l'ora e il fuso orario della macchina su cui è in esecuzione PostgreSQL). Viene restituito come valore in 'AAAA-MM-GG hh:mm:ss.nnnnnn+/-tz' formato. In questo formato:
- AAAA è un anno a 4 cifre.
- MM è un mese a 2 cifre.
- DD è un giorno del mese a 2 cifre.
- hh è un'ora a 2 cifre.
- mm è un minuto a 2 cifre.
- ss è un secondo a 2 cifre.
- nnnnnn definisce il numero di secondi frazionari (cioè la precisione) da 0 a 6.
- +tz o -tz è l'offset del fuso orario, più o meno da UTC.
Come puoi notare, questa funzione non ha parentesi. Tuttavia, se si desidera visualizzare una data e un'ora con una precisione specifica, è possibile utilizzare l'argomento intero facoltativo. Restituisce una data e un'ora con frazioni di secondi e l'offset del fuso orario. Questo argomento deve essere compreso tra 0 e 6; 0 non è una frazione di secondo, 1 è una frazione di secondo (ad es. una posizione dietro il decimale), ecc. Guarda il prossimo esempio:
SELECT CURRENT_TIMESTAMP(3) ;
Ecco il risultato della query:
2019-09-15 13:01:51.142+02
Questo risultato contiene un secondo frazionario di 3 cifre perché mettiamo 3 come argomento nella funzione CURRENT_TIMESTAMP. L'offset del fuso orario appare ancora alla fine.
Il tempo restituito da questa funzione non cambia durante le transazioni o una singola query. È sempre il momento in cui la transazione è iniziata.
NOW() è simile a CURRENT_TIMESTAMP
funzione e restituisce lo stesso risultato. La differenza è che CURRENT_TIMESTAMP
è la funzione standard SQL, mentre NOW() è specifica per PostgreSQL.
SELECT NOW() ;
Ecco il risultato della query:
2019-08-27 12:18:55.324145+02
Si noti che la funzione ORA() richiede parentesi. Tuttavia, puoi lasciarli vuoti e ottenere il valore predefinito.
CURRENT_TIMESTAMP e NOW() restituiscono il timestamptz tipo di dati.