Redshift - 将纪元字符串转换为时间戳

Redshift - Convert epoch string to timestamp

我有一个 table 有 2 列 epoch_start 和 epoch_end。 我想找出这 2 个纪元的天数差异。
我面临的问题是上面的列是字符变化(5000)类型。 查询 im 运行 是

select datediff(day,'1459762341','1450762341') as numdays;

我得到的错误是

ERROR: invalid input syntax for type timestamp: "1459762341"

您在 datediff() 中传递了错误的参数。

SELECT DATEDIFF('2014-11-30','2014-11-29') AS DiffDate 

以上将 return 两个给定日期之间的天数差异。 在此处阅读有关 datediff() 的更多信息 datediff

我找到了解决方案 -

  1. 从纪元获取时间戳 -

SELECT (TIMESTAMP 'epoch' + '1459762341' * INTERVAL '1 Second ') as mytimestamp

  1. 对于两个时期之间的日期差异 -

select datediff(day,(TIMESTAMP 'epoch' + '1458762341' * INTERVAL '1 Second '), (TIMESTAMP 'epoch' + '1459762341' * INTERVAL '1 Second ')) as numdays;

"epoc" 时间只是从 1970 年 1 月 1 日开始的秒数,因此它只是从该日期开始的秒数的一些计数器。

所以,epic_start 真的可以认为是 start_seconds,而 epic_end 实际上只是 end_seconds。

它们是从同一起点开始的秒数这一事实是唯一真正重要的事情。

从同一起点获取代表秒数的两个数字之间的天数:

天 = (end_seconds - start_seconds)/60/60/24

SELECT (end_seconds - epic_start)/60/60/24 AS numdays

Redshift 将 return 一个不带小数部分的整数值,因此如果公式 returns 1.9,numdays 将为 1。