BigInt для преобразования даты дает ошибки - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть столбец _action_date, который имеет тип bigint.

Пример данных, хранящихся в нем:

1,530,402,820,197,192

Я хочу преобразовать дату в метку времени без формата часового пояса.

Я пробовал метод to_timestamp (), но он не работает для bigint.Затем я разделил его на 1000000, чтобы исключить часть миллисекунд.Но тогда я получаю неправильную дату.

Пожалуйста, помогите мне разобраться в проблеме.

Я конвертировал ее с помощью онлайн-конвертера эпох, и он дает мне этот результат.

GMT: Saturday, 30 June 2018 23:53:40
Your time zone: Sunday, 1 July 2018 05:23:40 GMT+05:30

Я хочу получить тот же результат.

Я использую Amazon Redshift

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Почему бы вам не попробовать следующее

SELECT
tick.value
 , CAST((tick.value - 599266080000000000) / 864000000000 AS datetime) as DateTimeCalc1
FROM (values 
  (convert(bigint,1,530,402,820,197,192)) 
) AS tick(value);

Или вы можете использовать следующее

select dateadd(s, convert(bigint, 1,530,402,820,197,192) / 1000, convert(datetime, '1-1-1970 00:00:00'))

Разделите на 1000, чтобы просто уменьшить значение bigint для упрощения работы sql

0 голосов
/ 18 сентября 2018

Использование специального времени epoch с некоторыми кастами хорошо подходит мне здесь:

SELECT TIMESTAMP WITHOUT TIME ZONE 'epoch' + (1530402820197192::bigint::float / 1000000) * INTERVAL '1 second';

Конечно, замена 1530402820197192::bigint на ваш столбец также поможет.

...