psql date_trunc проблема - PullRequest
       2

psql date_trunc проблема

0 голосов
/ 27 марта 2012

У меня есть запрос в моей базе данных PSQL, но у меня есть небольшая проблема:

select sge_job.j_id,
       sge_job_usage.ju_id,
       sge_job_usage.ju_slots,
       date_trunc ('hour',sge_job_usage.ju_start_time) – date_trunc ('hour',sge_job.j_submission_time) as "Wait time"
from sge_job,
     sge_job_usage
where sge_job.j_id = sge_job_usage.ju_id
and   sge_job_usage.ju_start_time >= sge_job.j_submission_time

Проблема в том, что информацию, которую я получаю для ju_start_time, j_submission_time оставит в формате часов, но некоторые из них будут иметь информацию, например, за 3 дня 12 часов.

Они обе отметки времени без часового пояса, но мне нужно, чтобы он вычислил, если это 2 дня, и сложил их в часы. так что мой текущий выход:

71 |    71 |        1 | 01:00:00
72 |    72 |        1 | 01:00:00
73 |    73 |        2 | 4 days 03:00:00
74 |    74 |        2 | 01:00:00
75 |    75 |        2 | 03:00:00
76 |    76 |        2 | 03:00:00
77 |    77 |        1 | 22:00:00
78 |    78 |        1 | 18:00:00
79 |    79 |        2 | 19:00:00
80 |    80 |        2 | 20:00:00
81 |    81 |        2 | 20:00:00
82 |    82 |        2 | 11:00:00
83 |    83 |        2 | 21:00:00
84 |    84 |        2 | 1 day 10:00:00
85 |    85 |        2 | 1 day 17:00:00
86 |    86 |        2 | 2 days 17:00:00

так что с date_trunc hour он меняет мой формат времени на сколько часов, но я не могу получить функцию, которая избавит меня от моих дней и переведет их в часовой формат, поэтому я бы хотел, чтобы столбец 86 был 48 часы (2 дня) + 17 = 65 часов как результат, есть предложения, что попробовать? заранее спасибо

1 Ответ

1 голос
/ 27 марта 2012

Вычитание временной метки из другой временной метки дает значение интервала. Вы должны преобразовать этот интервал в часы, чтобы получить отображение.

Чтобы преобразовать интервал, например, в. часов, вы используете следующее:

extract(epoch from <interval_value>) / 3600

epoch возвращает секунды. Разделив это значение на 3600, вы получите часы.

В вашем случае следующее должно делать то, что вы хотите:

extract(epoch from date_trunc('hour',sge_job_usage.ju_start_time) – date_trunc ('hour',sge_job.j_submission_time)) / 3600 as "Wait time"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...