PostgreSQL

PostgreSQL To_char Timestamp con fuso orario

PostgreSQL To_char Timestamp con fuso orario

I metodi di formattazione PostgreSQL includono un'utile raccolta di strumenti per tradurre diversi tipi di dati (data/ora, intero, a virgola mobile, numerici) in stringhe formattate e per ricondurre le stringhe formattate in tipi di dati univoci. D'ora in poi, a volte dovremo convertire anche i fusi orari. L'orario viene sempre registrato in UTC nei timestamp PostgreSQL per il modulo dati del fuso orario, ma viene visualizzato per impostazione predefinita nel browser, nella sessione o nell'ora locale dell'utente. Una delle sue funzioni di supporto su cui facciamo affidamento è il metodo TO_CHAR(), che consente timestamp e timestamp con fuso orario, tra le altre forme, e ti consente di organizzare i pezzi di un timestamp come preferisci. Un timestamp, una doppia precisione, la durata, un numero o un valore numerico possono essere tutti convertiti in una stringa utilizzando il metodo PostgreSQL TO_CHAR(). Sembra che ci sia un metodo a argomento singolo, 'to_timestamp', che accetta un argomento a doppia precisione e si trasforma da epoca Unix a timestamp usando il fuso orario. Ti mostreremo come fare qualcosa al riguardo in questo post. Diamo prima un'occhiata più da vicino a to_char().

Sintassi:

La sintassi generale per la funzione to_char() è la seguente:

>> To_char( espressione, formato );

Il metodo TO_CHAR() in PostgreSQL necessita di due asserzioni:

Ci sono due tipi di timestamp disponibili in PostgreSQL:

Ed ecco il problema: il modulo dei dati di timestamp standard ignora i fusi orari. Ed è una necessità SQL (come sarebbe potuto accadere sembra oltre). Il nostro obiettivo principale è imparare to_Char() timestamp con un fuso orario. Per iniziare a lavorare su PostgreSQL con la funzione 'to_char()', apri la shell della riga di comando di PostgreSQL e fornisci i valori dei parametri per il server, il database, il numero di porta, il nome utente e la password obbligatori. Lascia queste considerazioni vuote se hai bisogno di consumare i parametri designati predefiniti come mostrato nell'immagine qui sotto.

To_char() per numero stringa String

Per comprendere il concetto della funzione to_Char() utilizzando timestamp con timezone, devi prima provare l'esempio dei numeri di stringa. Quindi abbiamo un numero "1897" e lo convertiremo nel "9999".Formato 99' utilizzando la query seguente. Dall'output di seguito, puoi vedere che il numero di stringa è stato convertito nel formato specificato.

>> SELECT to_char(1897, '9999.99');

Ecco un'altra illustrazione per la conversione. Questa volta abbiamo convertito un numero in un formato diverso contenente "virgola". Il carattere 'G' verrà utilizzato per specificare una virgola.

>> SELECT to_char(367.78, '9G999.99');

To_char Timestamp con TimeZone

Per comprendere il concetto di Timestamp con fuso orario, consideriamo un semplice esempio. Supponiamo che tu sia in "Pakistan", quindi il tuo fuso orario deve essere "PKT" in questo momento.

Esempio 01:

Proviamo a recuperare il timestamp corrente nella query SELECT mentre lo convertiamo nel formato Data-ora, come mostrato nella query seguente. Il termine 'TZ' viene utilizzato per restituire il fuso orario corrente. L'output mostra il giorno, la data, l'ora e il fuso orario.

>> SELECT to_char(CURRENT_TIMESTAMP, 'Giorno lun gg, aaaa HH12:MI AM (TZ)');

Cambiamo il nostro fuso orario in "Europa/Roma".

>> IMPOSTA Fuso Orario= 'Europa/Roma';

Otterrai un'ora, una data e un fuso orario diversi provando la stessa query SELECT, come mostrato.

Esempio 02:

Quando si specifica il fuso orario nella query SELECT, l'output non mostrerà il fuso orario corrente secondo l'output seguente.

>> SELECT to_char(CURRENT_TIMESTAMP AT TIME ZONE 'Asia/Jerusalem', 'yyyy HH12:MI AM (TZ)');

Esempio 03:

Creiamo una tabella veloce denominata 'time' con due campi. Uno è di tipo TIMESTAMP e l'altro è di tipo TIMESTAMPTZ.

>> CREATE TABLE time( without_timezone TIMESTAMP, with_timezone TIMESTAMPTZ);

Ora controlliamo il fuso orario corrente che abbiamo utilizzato nel nostro sistema utilizzando il comando SHOW nella shell come segue:

>> MOSTRA fuso orario;

Ora devi inserire i valori correnti della data e dell'ora del fuso orario corrente che hai utilizzato sul tuo dispositivo nella tabella 'time' utilizzando la funzione 'now()' come mostrato di seguito.

>> INSERT INTO time VALUES( now(), now());

Ora puoi recuperare il record dalla tabella "time" utilizzando la query SELECT come di seguito. La colonna "senza_fuso orario" mostra la data e l'ora correnti senza fuso orario, mentre la colonna "con_fuso orario" mostra l'ora locale con il fuso orario.

>> SELEZIONA * DA ora;

Cambiamo il fuso orario in "US/EASTERN" dalla query seguente.

>> IMPOSTA FUSO ORARIO SESSIONE 'US/EST';

Ora controlliamo di nuovo la tabella. Vedrai come il valore della colonna "with_timezone" è stato visualizzato in base al fuso orario "US/EASTERN", ma il valore di "senza_timezone" è lo stesso di prima.

>> SELEZIONA * DA ora;

Esempio 04:

Facciamo altri esempi per il metodo to_char(). Assumi la stessa tabella sopra "tempo". Convertiremo il valore della colonna "senza_fuso orario" in una stringa composta da ore, minuti, secondi e fuso orario. Proviamo la query SELECT usando il metodo to_char() per convertire il valore della colonna 'senza_fuso orario'. Abbiamo menzionato "TZ" nella nostra query, ma non mostrerà il fuso orario perché il valore della colonna non è costituito dal fuso orario. Il comando indicato di seguito fornisce l'output:

>> SELECT to_char (senza_timezone, 'HH12: MI: SS TZ') FROM time;

Ora proviamo la stessa query nel caso dell'altra colonna 'with_timezone', per convertirla nella stringa di ore, minuti, secondi e fuso orario. Questa volta mostrerà anche il fuso orario con l'ora utilizzando la query seguente.

>> SELECT to_char(with_timezone, 'HH12:MI:SS TZ') FROM time;

Conclusione:

Poiché il problema con/senza fuso orario riguarda più del semplice partizionamento della tabella, ti consiglio di utilizzare il tipo di fuso orario ogni volta che è possibile. Quasi tutte le linee guida hanno discusso su come eseguire l'eliminazione dipendente dal tempo in PostgreSQL utilizzando le ore locali. Una soluzione adeguata e sensibile al fuso orario aggiunge piccole complicazioni ma potrebbe salvarti da problemi in futuro.

I 10 migliori giochi da giocare su Ubuntu
La piattaforma Windows è stata una delle piattaforme dominanti per i giochi a causa dell'enorme percentuale di giochi che si stanno sviluppando oggi p...
I 5 migliori giochi arcade per Linux
Al giorno d'oggi, i computer sono macchine serie utilizzate per i giochi. Se non riesci a ottenere il nuovo punteggio più alto, saprai cosa intendo. I...
Battaglia per Wesnoth 1.13.6 Sviluppo rilasciato
Battaglia per Wesnoth 1.13.6 rilasciato il mese scorso, è la sesta versione di sviluppo nella 1.13.x e offre una serie di miglioramenti, in particolar...