Длительность преобразования в секундах в формат DD HH: MM: SS (Informix) - PullRequest
1 голос
/ 15 января 2020

Столбец длительность обеспечивает продолжительность контакта в секундах (целое число 8), и она может быть больше, чем день. Я использую это решение:

select ((INTERVAL(0 0:0:0) DAY TO SECOND) + callend UNITS SECOND) as dur from callrecord

Это дает такие результаты, как:

0 00:08:17
13 19:10:12

Идея состоит в том, чтобы пропустить дни, когда есть 0 дней:

   00:08:17
13 19:10:12

Я не сделал не удалось поиграть с TO_CHAR. Некоторые идеи объявили здесь , но я все еще не могу найти решение.

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Ну, я обнаружил, что этот код дает желаемый результат:

    select CASE 
      WHEN TRUNC(cr.callend/86400)=1 THEN TRUNC(cr.callend/86400)||' day '
      WHEN TRUNC(cr.callend/86400)>1 THEN TRUNC(cr.callend/86400)||' days '
      ELSE ''
    END||TRUNC(MOD(cr.callend,86400)/3600)||':'
       ||TRUNC(MOD(MOD(cr.callend,86400),3600)/60)
       ||':'||MOD(MOD(MOD(cr.callend,86400),3600),60) as dur
    from callrecord cr

Хотя выглядит не очень элегантно, этот SQL работает даже быстрее, чем в первом примере.

0 голосов
/ 15 января 2020

Я думаю, вам нужно преобразовать значение в строку. Мой синтаксис Informix немного слаб, но что-то вроде этого:

select (case when called < 24 * 60 * 60
             then to_char((interval(0 0:0:0) day to second) + callend units second), '%D %H:%M:%S')
             else to_char((interval(0:0:0) hour to second) + callend units second), '%H:%M:%S')
        end) as dur
from callrecord;
...