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

Come convertire una stringa in un timestamp senza fuso orario

Rappresentazione in stringa di un timestamp (=timestamp without time zone ) dipende dalle impostazioni locali. Pertanto, per evitare ambiguità che portano a errori di dati o Postgres a tirar fuori un'eccezione, hai due opzioni:

1.) Usa il formato ISO 8601 , che funziona allo stesso modo con qualsiasi locale o DateStyle impostazione:

'2013-08-20 14:52:49'

Potrebbe essere necessario eseguire il cast della stringa letterale in modo esplicito in cui il tipo di dati non può essere derivato dal contesto, a seconda del caso d'uso:

'2013-08-20 14:52:49'::timestamp

2.) Converti la stringa in timestamp utilizzando to_timestamp() con un modello di modello corrispondente:

to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss')

Questo restituisce timestamptz , assumendo l'impostazione del fuso orario corrente. Tipicamente (come in un incarico) il tipo viene forzato di conseguenza. Per timestamp , ciò significa che l'offset temporale viene troncato e ottieni il valore previsto. Anche in questo caso, se il tipo di destinazione non può essere derivato dal contesto, potresti dover eseguire il cast in modo esplicito:

to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss')::timestamp

Poiché ciò elimina semplicemente l'offset di tempo, risulta nel valore atteso. Oppure usa il AT TIME ZONE costruisci con un fuso orario a tua scelta:

to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss') AT TIME ZONE 'UTC'

Sebbene il fuso orario target sia lo stesso del tuo attuale timezone impostazione, non avviene alcuna trasformazione. Altrimenti il ​​timestamp risultante viene trasposto di conseguenza. Ulteriori letture:

  • Ignora del tutto i fusi orari in Rails e PostgreSQL