bigInt到日期的转换产生错误

时间:2018-09-18 06:04:34

标签: sql amazon-redshift

我有一个_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

3 个答案:

答案 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')