在redshift中使用带有毫秒的dateadd时出错

时间:2018-10-02 13:34:21

标签: sql amazon-redshift dateadd

最近我有一个问题。

在redshift的表中,我有2列:

visit_time,它以YYYY-MM-DD HH:MM:SS格式提及会话的开始时间;另一列是time_spent,它表示用户在特定页面上花费的毫秒数,当前是在float(8)

我想做的是添加带有time_spent的visit_time,并将其转换为YYYY-MM-DD HH:MM:SS,例如2018-09-20 21:00:55 + 2 = 2018-09 -20 21:00:57,以便我可以访问visit_end_time。我试图用这样的日期添加功能添加它

Select     
dateadd(SECOND,CAST (a.timeonpage AS DECIMAL)/1000 ,a.visit_time::date) time_left,

但是它返回错误:无效的操作:函数pg_catalog.date_add(“未知”,双精度,日期)不存在

为此,我尝试使用dateadd函数,如下所示:

Select     
dateadd(SECOND,CAST (a.timeonpage AS INTEGER)/1000 ,a.visit_time::date) time_left,

它不返回错误,但它返回日期的开始,例如2018-09-23 00:00:00,这并不是我所需要的。

我犯了什么错误,我该如何解决? 非常感谢!

1 个答案:

答案 0 :(得分:1)

dateadd函数确实需要一个整数作为间隔。第二个示例的问题在于,当您将a.visit_time转换为日期类型时,它会将其截断到该天的开始(删除时间部分)。而是将其强制转换为时间戳:

select dateadd(second, round(a.timeonpage/1000.0)::integer, a.visit_time::timestamp);

select dateadd(second, round(2345/1000.0)::integer, '2018-09-20 21:00:55'::timestamp);
      date_add
---------------------
 2018-09-20 21:00:57

另外,如果您将visit_time存储为字符串,我建议将列类型设置为时间戳。