Postgresql: Как найти разницу между двумя датами и временем в десятичных часах? - PullRequest
0 голосов
/ 29 января 2020

Система: Postgresql 9,6. Я не проектировал эту систему, и в этой таблице есть поля startdate (поле типа Date), starttime (Time), enddate (Date) и endtime (Time), но между двумя полями нет ни одного часа. Типы полей для каждого поля выше указаны в (parens).

Что мне нужно: используя поля даты и времени, я бы хотел разницу в десятичных часах. Это будет вычисляемый столбец в моей инструкции SELECT.

  1. Я искал поисковую систему и Stackoverflow для этого, и нет ничего, что точно соответствует тому, что мне нужно.
  2. Некоторые примеры покажи мне разницу в днях, но это то, что я хочу.
  3. Другой пример показывает разницу только в 2 раза, но мне нужно учесть работников третьей смены, которые начинаются в один день и заканчиваются на следующий день .
  4. В других примерах не учитываются разные звёздные и конечные даты.
  5. Некоторые люди могут начинать в один день и заканчивать sh смену на следующий день, поэтому это может занять 2 разных даты во внимание.

Я попробовал это и получил результат в формате "чч: мм: сс": endtime - starttime as hrs

Я долго искал, как преобразовать это результат до десятичных часов. Я также пробовал эти форматы:

(date enddate time endtime) - (date startdate time starttime) as hrs

(enddate endtime) - (startdate starttime) as hrs

timestamp(enddate endtime) - timestamp(startdate starttime) as hrs

age(enddate endtime) - age(startdate starttime) as hrs

extract(EPOCH FROM timestamptz(enddate endtime)) - extract(EPOCH from timestamptz (startdate starttime))

Я не много делаю SQL на работе, поэтому любая помощь будет принята. Я учусь, видя код, но я также хотел бы понять, что делает каждая часть, чтобы я мог ПОНИМАТЬ и применить это понимание к будущим проблемам.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 29 января 2020
select extract (EPOCH from (enddate + endtime - (startdate + starttime))) / (60 * 60) from a;
0 голосов
/ 29 января 2020

Я думаю, что это будет делать то, что вы хотите:

select ((extract(epoch from enddate) + extract(epoch from endtime) -
        (extract(epoch from startdate) + extract(epoch from starttime)
       ) / (60.0 * 60)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...