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, punto mobile, numerico) a stringhe formattate e tradurre stringhe formattate a tipi di dati univoci. D'ora in poi, a volte dobbiamo convertire anche i fusi orari. Il tempismo è sempre registrato in UTC nei timestamp PostgreSQL per il modulo dati del fuso orario, ma viene visualizzato per impostazione predefinita nel browser, sessione o ora locale dell'utente. Una delle sue funzioni di supporto su cui siamo venuti a fare 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. Un timestamp, una doppia precisione, la durata, un numero o un valore numerico possono essere convertiti in una stringa usando il metodo PostgreSQL To_Char (). Sembra che ci sia un metodo a singolo argomentazione, "to_timestamp", che prende 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 un'occhiata più da vicino a to_char () prima.

Sintassi:

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

>> to_char (espressione, formato);

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

  • Espressione: Un timestamp, una durata, un numero, una doppia precisione o un valore numerico che viene tradotto in una stringa secondo un formato particolare può essere usato come espressioni.
  • Formato: Lo stile in cui verrà mostrata la stringa di output. Il formato può essere diverso in base al tipo di espressione, e.G., Numero, data.

Ci sono due tipi di timestamp disponibili in PostgreSQL:

  • Timestamp: senza fuso orario.
  • Timestamptz: con il fuso orario.

Ed ecco il problema: il modulo di dati Timestamp standard è ignorante dei fusi orari. Ed è una necessità SQL (come potrebbe essere avvenuto sembra oltre). Il nostro obiettivo principale è imparare il timestamp TO_CHAR () con un fuso orario. Per iniziare a funzionare sulla funzione PostgreSQL con la funzione "To_char ()", apri la shell della riga di comando PostgreSQL e consegna i valori dei parametri per server obbligatorio, database, numero di porta, nome utente e password. Lascia queste considerazioni non riempite se è necessario consumare i parametri designati predefiniti come mostrato nell'immagine seguente.

To_char () per numero di stringa

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

>> Seleziona TO_CHAR (1897, '9999.99 ');

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

>> Seleziona to_char (367.78, '9g999.99 ');

Timestamp To_Char con fuso orario

Per capire il timestamp con il concetto di fuso orario, consideriamo un semplice esempio. Supponiamo di essere in "Pakistan", quindi il tuo fuso orario deve essere "pkt" in questo momento.

Esempio 01:

Proviamo a recuperare il timestamp corrente nella query selezionata mentre lo convertiamo in formato data-tempo, come mostrato nella query seguente. Il termine "TZ" viene utilizzato per restituire il fuso orario attuale. L'output visualizza il giorno, la data, l'ora e il fuso orario.

>> Seleziona to_char (current_timestamp, 'day mon dd, yyyy hh12: mi am (tz)');

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

>> imposta timeZone = 'Europe/Roma';

Otterrai un tempo, una data e un fuso orario diversi dopo aver provato la stessa query selezionata, come mostrato.

Esempio 02:

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

>> Seleziona to_char (current_timestamp nel fuso orario "Asia/Gerusalemme", "YYYY HH12: MI AM (TZ)");

Esempio 03:

Creiamo una tabella veloce denominata "tempo" con due campi. Uno è di tipo timestamp e l'altro è il tipo Timestamptz.

>> Crea il tempo della tabella (senza_timezone timestamp, with_timezone timestamptz);

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

>> Show Timezone;

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

>> inserire in valori temporali (ora (), ora ());

Ora puoi recuperare il record dal "tempo" della tabella usando la query seleziona come di seguito. La colonna "senza_timezone" mostra la data e l'ora corrente senza fuso orario, mentre la colonna "with_timezone" mostra completamente l'orario con il fuso orario.

>> seleziona * dal tempo;

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

>> imposta il fuso orario della sessione "US/Eastern";

Ora controlliamo di nuovo il tavolo. Vedrai come è stato visualizzato il valore della colonna "with_timezone" in base alla fusione di tempo "US/Eastern", ma il valore di "senza_timezone" è lo stesso di prima.

>> seleziona * dal tempo;

Esempio 04:

Facciamo altri esempi per il metodo To_Char (). Assumi lo stesso tavolo sopra "tempo". Convertiremo il valore "senza_timezone" in una stringa composta da ore, minuti, secondi e fuso orario. Proviamo la query Seleziona usando il metodo TO_CHAR () per la conversione del valore della colonna "senza_timezone". Abbiamo menzionato "TZ" nella nostra query, ma non mostrerà il fuso orario perché il valore della colonna non consiste nel fuso orario. Il comando a base di emergenza indicata fornisce l'output:

>> Seleziona to_char (senza_timezone, 'hh12: mi: ss tz') da tempo;

Ora proviamo la stessa query nel caso dell'altra colonna "With_timezone", per convertirla in stringa di ore, minuti, secondi e fuso orario. Questa volta mostrerà anche il fuso orario con il tempo usando la query di seguito.

>> Seleziona to_char (with_timezone, 'hh12: mi: ss tz') da tempo;

Conclusione:

Poiché il problema con/senza fuso orario colpisce 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 di come eseguire lo spurgo dipendente dal tempo in PostgreSQL usando le ore locali. Una soluzione adeguata e sensibile al fuso orario aggiunge poche complicazioni ma potrebbe salvarti dai guai in futuro.