最近我有一个问题。
在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,这并不是我所需要的。
我犯了什么错误,我该如何解决? 非常感谢!
答案 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存储为字符串,我建议将列类型设置为时间戳。