Presto SQL / Athena: 如何 return 仅小时、分钟和秒,来自 "interval day to second"

Presto SQL / Athena: how to return only hours, minutes and seconds, from "interval day to second"

我有一个查询,它根据两个时间戳计算差异,returns 结果是 "interval day to second",如下所示:

SELECT (interval '1' second)*(timestamp_1 - timestamp_2) as time_delta

返回的结果如下所示:

  |  time_delta
--+----------------
  | 0 03:28:47.000
  | 0 02:20:37.000
  | 0 00:55:12.000

etc...

typeof() 结果是 "interval day to second".

有没有办法只保留时分和秒?这样我就会得到类似的东西:

  |  time_delta
--+----------------
  |   03:28:47
  |   02:20:37
  |   00:55:12

或者至少删除 "day" 部分?

提前致谢。

您应该能够使用 presto 便捷功能获取您返回的时间戳。看起来 presto 支持 MySQL 函数格式,因此您应该能够根据 presto 文档使用 date_parse

类似

SELECT date_parse((interval '1' second)*(timestamp_1 - timestamp_2), %r) as time_delta

更多信息在这里: https://trino.io/docs/current/functions/datetime.html

Presto 没有格式化 interval 值的功能。您的选择:

castvarchar + regexp_replace:

presto:default> SELECT regexp_replace(CAST(parse_duration('3789s') AS varchar), '^0 (.*)\.000', '');
  _col0
----------
 01:03:09

hour()minute()second() 函数 + 连接。 format() 函数大大简化了这一点,但 Athena 上尚不可用。