Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

andreia_sp

[Resolvido] Somar horas

Recommended Posts

Pessoal,

 

to quebrando a cabeça mas ta complicado... eu tenho uma consulta SQL que faz um calculo e me retorna um total:

 

1900-01-01 10:05:00.000
1900-01-01 10:00:00.000

 

a data nao importa o campo é só pra horas. Como que em sql eu somo isso?? SUM num funciona, group by tb nao... :wacko:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Andreia

 

Jah tentou um datepart com as horas e depois usar um sum?!

Usei em um view aki no trampoe deu certo.

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Juska eu consegui chegar no total por linha, soh falta fazer o total geral. Veja a consulta:

 

select convert(datetime,convert(varchar,datediff(hour,entrada,saida_a)) + ':' + convert(varchar,datediff(minute, entrada, saida_a) % 60)) + 
convert(datetime,convert(varchar,datediff(hour,retorno_a,saida)) + ':' + convert(varchar,datediff(minute, retorno_a, saida) % 60)) totalDia
from TABELA where id = 3

 

isso me retorna assim:

 

1900-01-01 09:05:00.000

1900-01-01 09:55:00.000

1900-01-01 08:50:00.000

1900-01-01 10:30:00.000

consegui ate somar, soh que ele ta somando junto da data, nem sei pq essa data aparece se inseri somente hora. Eu precisaria do total 38:20

to matando a cabeça pra achar com linguagem de programação mas vo dizer, eh um inferno mexer com data/hora

Compartilhar este post


Link para o post
Compartilhar em outros sites

-- uma idéia seria somar separadamente as horas e minutos, para as horas multiplicar por 60 para poder somar com os minutos e no final dividir por 60 para achar o total de horas e pegar o resto com a função mod (%) para se obter os minutos restantes:

set nocount on
declare @tb table (valor datetime)
insert into @tb (valor) values ('09:05:00')
insert into @tb (valor) values ('09:55:00')
insert into @tb (valor) values ('08:50:00')
insert into @tb (valor) values ('10:30:00')
insert into @tb (valor) values ('00:45:00')

select 
	convert(varchar,( sum(datepart(hh,convert(varchar,valor,108))) * 60 + sum(datepart(mi,convert(varchar,valor,108))) ) / 60 ) + ':' +
	REPLICATE('0', 2 - datalength( ltrim(rtrim( convert(varchar,( sum(datepart(hh,convert(varchar,valor,108))) * 60 + sum(datepart(mi,convert(varchar,valor,108))) ) % 60 ) ))) ) + 
	convert(varchar,( sum(datepart(hh,convert(varchar,valor,108))) * 60 + sum(datepart(mi,convert(varchar,valor,108))) ) % 60 ) 
from @tb
--OBS.: o replicate é para formatar os minutos no formato '00'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi gente eu consegui fazer da seguinte forma:

 

 

select (saida - entrada) - (retorno_a - entrada_a) Total from TABELA where id = 3

 

o que me retorna algo assim

 

1900-01-01 09:05:00.000

1900-01-01 08:55:00.000

1900-01-01 07:50:00.000

1900-01-01 09:30:00.000

bom eu decidi nao complicar no sql pq a base real será em outro banco e eu correria o risco de fazer uma baita solucao em Sql e depois ser incompativel.

A somatoria disso ai eu resolvi no ASP mesmo

 

 

vl a atenção de todos

 

 

ps.: queria tirar a curiosidade, pq diabos aparece a data sendo que nao tenho convert datetime e na base soh tem horas....

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.