【问题标题】:Format number of seconds as interval HH:MM:SS in Redshift将秒数格式化为 Redshift 中的间隔 HH:MM:SS
【发布时间】:2021-10-04 10:54:43
【问题描述】:

我正在处理以我的数据管道中的绝对秒数表示的时间量。做类似的事情是相当微不足道的

select 42602 * interval '1 second';

返回正确的答案11:50:02

但是当我对实际数据运行相同的逻辑时

select on_call, 
    on_call::int * interval '1 second'
from dev_isaac.agency_time_report
order by agent_name, day_of;

生成的间隔列改为填充为

为什么 redshift 处理这个问题的方式会有所不同,有没有一种很好的方法来解决这个问题,而无需手动计算每个部分。

【问题讨论】:

  • 嗨,有趣,也许这可能是有趣的stackoverflow.com/questions/51454950/…
  • 请修正输出的格式。
  • 看起来它正在将间隔转换为毫秒?这可能是您的 SQL 客户端如何转换值的结果。也许把它当作时间?

标签: amazon-web-services amazon-redshift


【解决方案1】:

有点复杂...但这可以用于 HH:MM 转换:

(DATEDIFF(second,'2011-12-31 8:30:00','2011-12-31 20:30:15')/(60*60))::VARCHAR || ':' || MOD(DATEDIFF(second,'2011-12-31 8:30:00','2011-12-31 20:30:15'),(60*60))

这是我们找到的解决方案:

LTRIM(DATEADD(seconds,DATEDIFF(seconds,order_create,placed_time),'1900-01-01 00:00:00'),'1900-01-01')::time

【讨论】:

  • 这应该可以工作:TO_CHAR(("ga:AvgSessionDuration" || 'second')::interval, 'HH24:MI:SS'),但是得到以下错误:函数“to_char (间隔,文本)”不支持。查询 1 错误:错误:Redshift 表不支持指定的类型或函数(每条 INFO 消息一个)。
  • Redshift 似乎不想启用将连接变量传递到 to_char 函数...
  • 这是我们找到的解决方案:
猜你喜欢
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 2011-06-17
  • 2018-12-29
  • 1970-01-01
  • 2017-10-16
相关资源
最近更新 更多