Как преобразовать bigint в метку времени с часовым поясом в postgres в обновлении - PullRequest
0 голосов
/ 15 января 2019

Есть ли способ разыграть BIGINT до TIMESTAMP или TIMESTAMP WITH TIME ZONE в Postgres? Мне нужно скопировать данные из столбца BIGINT в столбец TIMESTAMP.

Вот что я пробовал:

update table
set date__timestamp = date__bigint::timestamp 
where foo = 1;

ОШИБКА: невозможно привести тип bigint к метке времени без часового пояса

Я изменил столбец метки времени на столбец с часовым поясом и попытался это сделать:

update table
set date__timestamp = date__bigint::timestamp with time zone at time zone 'PST' 
where foo = 1;

ОШИБКА: невозможно привести тип bigint к метке времени с часовым поясом

update table
set date__timstamp = TO_CHAR(TO_TIMESTAMP(date__bi / 1000), 'DD/MM/YYYY HH24:MI:SS')
where foo = 1;

ОШИБКА: столбец "date__timestamp" имеет тип отметки времени без часового пояса но выражение имеет тип text Подсказка: вам нужно будет переписать или привести выражение.

Данные выглядят так.

date_bigint: 20181102
date_timestamp: 2018-11-02 17:00:00.000000

Нужно ли передавать значения по умолчанию в кастинг?

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Вы можете преобразовать его в текст и использовать TO_TIMESTAMP и преобразовать в timestamp at time zone

SELECT 
to_timestamp ( '20181102'::bigint::text,'YYYYMMDD')::timestamp at time zone 'UTC' 
at time zone 'PST' ;

update t
   set date__timestamp = TO_TIMESTAMP(date_bigint::text,'YYYYMMDD')::timestamp 
   at time zone 'UTC' at time zone 'PST'
where foo = 1;

Демо

0 голосов
/ 15 января 2019

В этом ответе предполагается, что в столбце date__bigint хранится метка времени UNIX в секундах с начала эпохи. Вот один из способов преобразования в метку времени Postgres:

UPDATE your_table
SET date__timestamp = TIMESTAMP 'epoch' + date__bigint * INTERVAL '1 second'
WHERE foo = 1;

То есть мы можем добавить некоторое количество секунд к метке времени эпохи, чтобы преобразовать ваше значение в формальную метку времени Postgres.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...