Как рассчитать разницу во времени (ЧЧ: ММ: СС) от даты и времени (в формате ISO) в Postgres - PullRequest
0 голосов
/ 05 мая 2018

У меня есть таблица T1 в Postgres, которая выглядит следующим образом:

| event | Date_Time                |
|-------|--------------------------|
| start | 2018-04-30T06:09:30.986Z |
| run   | 2018-04-30T10:37:38.044Z |
| end   | 2018-04-30T11:39:38.044Z |

Date_Time в формате ISO (хранится как varchar), и мне нужно рассчитать разницу в Date_Time, чтобы мои выходные данные выглядели следующим образом:

| event | Date_Time                | Time_Difference |
|-------|--------------------------|-----------------|
| start | 2018-04-30T06:09:30.986Z | 4:28:08         |
| run   | 2018-04-30T10:37:38.044Z | 1:02:00         |
| end   | 2018-04-30T11:39:38.044Z |                 |

(10: 37: 38 - 06: 09: 30 = 4:28:08)

Как я могу сделать это с помощью SQL?

1 Ответ

0 голосов
/ 05 мая 2018

Не имеет отношения к вопросу, но: вы никогда не должны сохранять значения меток времени (или даты или числа) в varchar.


Сначала вы должны преобразовать значение varchar в метку времени. Если значения действительно отформатированы правильно, вы можете просто привести их: Date_Time::timestamp - или, возможно, к timestamptz.

Насколько я могу судить, вы хотите, чтобы в вашем результате была следующая строка . Этого можно добиться с помощью оконной функции lead()

select event, 
       Date_Time,
       date_time::timestamp - lead(date_time::timestamp) over (order by date_time::timestamp) as time_difference
from the_table
order by date_time;

Результатом вычитания одной временной метки из другой является интервал , вы можете форматировать , если хотите.

...