TIMESTAMP для пользовательской продолжительности - PullRequest
1 голос
/ 13 февраля 2020

У меня есть две метки времени, и я могу получить разницу в два, используя TIMESTAMP_DIFF, но я могу получить разницу только в днях, часах, минутах и ​​c. То, что я хочу, - это разница двух в пользовательском формате. Например, такие как " 3D: 5H: 23M: 08S " или " 03: 05: 23: 08 " или " 3 дня, 5 часов, 23 минуты, 8 секунд " .

Можно ли это сделать с BigQuery Standard SQL?

Ответы [ 2 ]

2 голосов
/ 13 февраля 2020

Ниже для BigQuery Standard SQL

#standardSQL
WITH `project.dataset.table` AS (
  SELECT TIMESTAMP '2020-02-13 13:28:50.532153 UTC' start, TIMESTAMP '2020-03-16 18:51:58.532153 UTC' finish UNION ALL
  SELECT TIMESTAMP '2020-02-13 13:28:50.532153 UTC', TIMESTAMP '2020-02-16 18:51:58.532153 UTC'
)
SELECT -- start, finish, 
  FORMAT('%sD:%s', x, FORMAT_TIMESTAMP('%HH:%MM:%SS', y)) custom_format1,
  FORMAT('%s:%s', x, FORMAT_TIMESTAMP('%H:%M:%S', y)) custom_format2,
  FORMAT('%sdays ,%s', x, FORMAT_TIMESTAMP('%Hhours, %Mminutes, %Sseconds', y)) custom_format3
FROM `project.dataset.table`,
UNNEST([CAST(TIMESTAMP_DIFF(finish, start, DAY) AS STRING)]) x,
UNNEST([TIMESTAMP_SECONDS(TIMESTAMP_DIFF(finish, start, SECOND))]) y

с выводом

Row custom_format1  custom_format2  custom_format3   
1   32D:05H:23M:08S 32:05:23:08     32days ,05hours, 23minutes, 08seconds    
2   3D:05H:23M:08S  3:05:23:08      3days ,05hours, 23minutes, 08seconds    
1 голос
/ 13 февраля 2020

Вы можете преобразовать разницу в метку времени, а затем использовать format_timestamp() для своего сердца:

select TIMESTAMP_MILLIS(timestamp_diff(ts1, t23, millisecond))

Это дает значение метки времени (вероятно) в 1970-х годах, но вас, вероятно, интересует только дни, часы и меньшие единицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...