2008-10-13 10 views

Répondre

5

Dans SQL Server 2005, vous pouvez utiliser les éléments suivants:

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

qui convertit tout d'abord les secondes en une date après 1900-01-01, et obtient alors les hh: mm: ss partie.

Si la colonne est plus de 24 heures, ce sera rouler, si vous voulez jours et heures dans ce cas, faites quelque chose comme:

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

Chaque base de données le fait différemment. J'utiliser PostgreSQL et il le fait comme si:

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

Vous devrez consulter le manuel pour la base de données que vous utilisez.

+0

Les travaux suivants: sélectionnez to_char (intervalle '' 1000s, 'HH24: MI: SS'); ou sélectionnez to_char (now() - pg_postmaster_start_time(), 'DDD' jours "HH24: MI: SS '); –

+0

Dans quel dialecte SQL? – Tomalak

2

En supposant que vous avez secondes:

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 

Je vais laisser la tâche de mise en forme bien à vous. :-)

0

Il n'y a pas de standard, bien que de nombreux SGBD aient leur propre syntaxe personnalisée.

En général, il est préférable d'effectuer un travail de formatage pour la lisibilité humaine dans la couche de présentation de votre application plutôt que dans la base de données.

0

Dans 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 
    ; 
Questions connexes