Как преобразовать в SQL количество секунд в удобочитаемую продолжительность? - PullRequest
2 голосов
/ 13 октября 2008

В базе данных SQL я делаю несколько выборок, которые получают длительность (как результат вычитания между двумя датами) в секундах как целое Но я хочу отформатировать этот результат в удобочитаемой форме, например, «чч: мм» или «дд: чч». Возможно ли это в SQL и как я могу это реализовать?

Ответы [ 5 ]

5 голосов
/ 13 октября 2008

В SQL 2005 вы можете использовать следующее:

    select convert(varchar(8), dateadd(second, [SecondsColumn], 0),  108)

Который сначала преобразует секунды в дату после 1900-01-01, а затем получает часть чч: мм: сс.

Если столбец больше 24 часов, он перевернется, если вы хотите, чтобы дни, а затем часы в этом случае просто делали что-то вроде:

case when SecondsColumn> (24*60*60) 
        then 
            cast(datepart(day,datediff(dd, 0, dateadd(second, SecondsColumn, 0))) as varchar(4))
        +   'd' + convert(varchar(2), dateadd(second, SecondsColumn, 0), 108) 
    else
            convert(varchar(8), dateadd(second, SecondsColumn, 0), 108) 
    end
2 голосов
/ 13 октября 2008

Если у вас есть секунды:

DECLARE @DurationSeconds INT

-- 25h 45m 14s
SET @DurationSeconds = (25 * 3600) + (45 * 60) + (14)

SELECT 
  @DurationSeconds, 
  @DurationSeconds / 3600 hours, 
  @DurationSeconds % 3600 / 60 minutes,
  @DurationSeconds % (3600 / 60) seconds

Я предоставлю вам задачу форматирования, которая вам нравится. : -)

2 голосов
/ 13 октября 2008

Каждая база данных делает это по-своему. Я использую PostgreSQL, и он делает это так:

select to_char(my_date - my_other_date, 'HH:MM:SS');

Вам придется обратиться к руководству по используемой вами базе данных.

0 голосов
/ 08 февраля 2012

В Oracle SQL:

   -- 86,400 seconds in a  day
   --  3,600 seconds in an hour
   --     60 seconds in a  minute
   select duration, -- seconds
    trunc((duration)/86400) || ':' || -- dd
    trunc(mod(duration,86400)/3600) || ':' || -- hh
    trunc(mod(mod(duration,86400),3600)/60) || ':' || -- mm
    mod(mod(mod(duration,86400),3600),60) -- ss
   as human_readable
   from dual
   ;
0 голосов
/ 13 октября 2008

Стандарт не существует, хотя многие СУБД имеют свой собственный синтаксис.

Как правило, лучше выполнять работу по форматированию для удобства чтения на уровне представления вашего приложения, чем где-либо рядом с базой данных.

...