Re: Converter VARCHAR para TIMESTAMP com milleseconds ERROR: date/time field value out of range

From: Arthur Nascimento <tureba(at)gmail(dot)com>
To: cleitondomazak(at)gmail(dot)com
Cc: pgsql-pt-geral(at)lists(dot)postgresql(dot)org
Subject: Re: Converter VARCHAR para TIMESTAMP com milleseconds ERROR: date/time field value out of range
Date: 2018-10-09 13:23:05
Message-ID: CALVFHFassw5Tg4T+mad=V8HURNm8zRxAO9BAUg6RkpcU4y5stA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-pt-geral

Oi Cleiton,

On Tue, 9 Oct 2018 at 07:00, Cleiton Luiz Domazak
<cleitondomazak(at)gmail(dot)com> wrote:
>
> Eu tenho um campo com o segundo VARCHAR "2018-07-05T16:14:27.1427" e eu o converto para timestamp com o seguinte select:
>
> select last_run, to_char(to_timestamp(last_run,'yyyy-MM-dd HH24:mi:ss') - interval '2 hour','yyyy-MM-dd"T"HH24:mi:ss"Z"') as new_last_run from schedule_tasks;

Primeiro, não use timestamp. Ele descarta o timezone do texto de
entrada e também ignora o timezone da sua sessão, o que quase nunca é
o que você quer e vai te causar trabalho extra na entrada e na saída,
como já está causando. Use timestamptz (with timezone), que trata
corretamente o timezone na entrada e na saída; quando quiser a saída
em um timezone, use, para um campo:

SELECT seu_timestamptz AT TIME ZONE 'Brazil/Acre';

ou, para aplicar em todos os campos timestamptz que o banco te retorna
a partir deste momento na sessao:

SET TIMEZONE TO 'Brazil/Acre';
SELECT seu_timestamptz;

Segundo, quando estiver usando esse formato (ISO 8601) de entrada, use
cast(seu_texto to timestamptz) ou seu_texto::timestamptz. A função
to_timestamp[tz] é mais para quando se usa formatos ambíguos ou não
formatados corretamente. Nesse caso, datestyle é desnecessário e não
se aplica.

Até mais,

Tureba - Arthur Nascimento

In response to

Responses

Browse pgsql-pt-geral by date

  From Date Subject
Next Message Cleiton Luiz Domazak 2018-10-09 13:26:42 Re: Converter VARCHAR para TIMESTAMP com milleseconds ERROR: date/time field value out of range
Previous Message Cleiton Luiz Domazak 2018-10-09 12:24:25 Re: Converter VARCHAR para TIMESTAMP com milleseconds ERROR: date/time field value out of range