PostgreSQL получает разницу во времени между двумя текстовыми полями

#postgresql

#postgresql

Вопрос:

У меня есть два поля в таблице, подобные

 Time1(varchar)     Time2(varchar)
13:01:15           14:02:06
  

Как мне получить разницу во времени между этими двумя полями?

Комментарии:

1. Реальный вопрос в том, почему вы сохраняете значение времени в varchar столбце. Это должно быть сохранено в столбце с типом time

2. На самом деле это разработано какой-то другой командой.

3. Я использую их базу данных только для создания отчетов

Ответ №1:

Вы можете привести значения к правильному значению времени, а затем просто вычесть их:

 '14:02:06'::time - '13:01:15'::time 
  

или

 time_2::time - time_1::time
  

Результатом является интервал

Комментарии:

1. Мы предполагаем, что time_2 здесь всегда больше time_1. Возможно, стоит обновить запрос до greatest(time_1::time, time_2::time) - least(time_1::time, time_2::time)

2. @Scoots: интервал может быть отрицательным

3. могу ли я использовать sum(time_2::time — time_1::time) в запросе group by.

4. Я думаю, это должно сработать, если вывод (time_2::time — time_1:: time ) имеет тип interval

5. @a_horse_with_no_name Поскольку OP хочет их суммировать, сочетание положительных и отрицательных интервалов будет пагубным. По общему признанию, оба наших комментария появились до того, как мы узнали об этом.