我有一个_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
答案 0 :(得分:2)
Using the special time epoch
和一些强制转换对我来说很好:
SELECT TIMESTAMP WITHOUT TIME ZONE 'epoch' + (1530402820197192::bigint::float / 1000000) * INTERVAL '1 second';
当然,用您的列替换1530402820197192::bigint
也将有所帮助。
答案 1 :(得分:0)
为什么不尝试以下操作
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,只是为了简化SQL操作简化了bigint
答案 2 :(得分:0)
尝试:选择to_timestamp(big_int_field :: text,'YYYYMMDDHH24MISS')