2009-05-29 5 views
7

tengo la siguiente tabla de tipos de datos TIEMPOobtener la suma de los tipos de datos TIEMPO (MSSQL08) de una tabla

aclaración: Estoy representando a las horas/minutos/segundos de vídeos y quiero averiguar cuánto tiempo serán los vídeos .

runtime 
---------------- 
01:27:19.0000000 
01:26:09.0000000 
01:00:56.0000000 
01:09:59.0000000 
01:25:43.0000000 
01:16:01.0000000 
01:27:12.0000000 
01:22:00.0000000 
01:17:47.0000000 
01:31:07.0000000 
01:36:23.0000000 
01:13:29.0000000 
01:20:12.0000000 
01:03:24.0000000 
00:58:42.0000000 

Quiero obtener la SUMA de todos estos tiempos.

+0

¿Para qué? No tiene sentido – dkretz

+3

No creo que no tenga sentido ... tal vez estas son las duraciones de las canciones en un álbum, y quiere la duración total de todo el álbum? Solo una posibilidad ... – JosephStyons

+0

Joseph está en lo cierto ... Quiero obtener la duración de la serie de videos "Summer of NHibernate" para que cuando recomiende esta serie a otros les diga exactamente cuánto tardarán los videos. atravesar. –

Respuesta

6

no he utilizado mucho todavía 2008 y no tiene una instancia útil donde estoy para comprobar esto, pero algo como esto podría funcionar:

SELECT 
    DATEADD(ms, SUM(DATEDIFF(ms, '00:00:00.000', my_time)), '00:00:00.000') 
FROM 
    dbo.My_Table 

Como le dorfier señala, añadiendo veces es un poco sin sentido, porque se supone que representan una hora del día. Supongo que los está usando para indicar horas/minutos/segundos.

Ah, y no tengo idea de lo que sucederá con lo anterior si dura más de 24 horas.

+0

Funcionó como un amuleto ... El resultado fue '1900-01-01 19: 36: 23.000' así que creo que si La respuesta fue más de 24 horas, solo pasará al día siguiente. –

0

Lo mejor que puedo pensar es analizar el tiempo en componentes de hora, minuto, segundo y milisegundos, convertirlo en milisegundos (agregando y multiplicando), luego sumarlos y usar módulos y restas para convertirlo de vuelta en un intervalo de tiempo.

Por ejemplo

create function dbo.GetMilliseconds (@timespan varchar (16)) 
    returns int 
as 
begin 
declare @ms int 
declare @seconds int 
declare @min int 
declare @hour int 
set @ms = cast(substring(@timespan, 10, 7) as int) 
set @seconds = cast(substring(@timespan, 7, 2) as int) 
set @min = cast(substring(@timespan, 4,2) as int) 
set @hour = cast(substring(@timespan, 1, 2) as int) 
return @ms + (@seconds * 1000) + (@min * 60000) + (@hour * 3600000) 
end 
go 

create function dbo.ParseMilliseconds (@timespan int) 
    returns varchar (16) 
as 
begin 
declare @hour int 
declare @min int 
declare @seconds int 
declare @ms int 
declare @leftover int 
set @hour = @timespan/3600000 /* this will round down */ 
set @leftover = @timespan % 3600000 
set @min = @leftover/60000 
set @leftover = @leftover % 60000 
set @seconds = @leftover/1000 
set @ms = @leftover % 1000 
return 'You''ll have to the string conversion yourself' 
end 
go 

Y luego SELECT dbo.ParseMilliseconds(sum(dbo.GetMilliseconds(timespan))) as added_timespan

No he probado todo esto, y puede haber formas más simples, pero sé que esto va a funcionar.

0

alguna variación de

SELECT SUM (DATEDIFF (MINUTO, '0:00:00', TimeCol)) DE Horario de tienda

funciona, pero

que tendrá que normalizar restando el fecha parte de cada fecha y hora tendrá que convertir el total de minutos a un tiempo

Cuestiones relacionadas