Presto SQL / Афина: как вернуть только часы, минуты и секунды из «интервала дня в секунду» - PullRequest
0 голосов
/ 23 января 2020

У меня есть запрос, который по двум временным меткам вычисляет разницу и возвращает в результате «интервал день в секунду» следующим образом:

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 (), который является результатом "интервал день в секунду".

Есть ли способ сохранить только час-минуту и ​​вторую часть? Чтобы я мог получить что-то вроде:

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

или, по крайней мере, удалить "дневную" часть?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 23 января 2020

Presto не имеет функций для форматирования значений interval. Ваши варианты:

cast до varchar + regexp_replace:

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

или hour(), minute() и second() функции + сцепление. Это значительно упрощается с помощью функции format(), но это еще не доступно для Athena.

0 голосов
/ 23 января 2020

Вы должны быть в состоянии использовать функцию удобства до получения отметки времени, которую вы получите. Похоже, что presto поддерживает функциональный формат MySQL, поэтому вы можете использовать date_parse на основе документов presto.

Что-то вроде

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

Более подробная информация здесь: https://prestosql.io/docs/current/functions/datetime.html

...