【问题标题】:Error when using dateadd with millesecond in redshift在红移中使用带有毫秒的 dateadd 时出错
【发布时间】:2018-10-02 13:34:21
【问题描述】:

最近我身边有一个问题。

在 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("unknown", double precision, date) 不存在

为此,我尝试像这样使用 dateadd 函数:

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

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

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

【问题讨论】:

    标签: sql amazon-redshift dateadd


    【解决方案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 存储为字符串,我建议您将列类型设置为时间戳。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 2019-10-24
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多