Somar Campos de Time(7) SQL
e colocar essa foma no GridView [img]http://arquivo.devmedia.com.br/forum/imagem/419440-20150518-174733.jpg[/img]
Ivanilson Almeida
Melhor post
Marcos P
19/05/2015
A ideia é converter tudo para segundos, somar em segundos e "re-converter" para a picture "hh:mm:ss".
declare @T int
set @T = (SELECT sum(DATEPART(SECOND, [Total]) +
(DATEPART(MINUTE, [Total])* 60)+
(DATEPART(HOUR, [Total]))*3600) as 'TempoSegundos'
FROM Tabela)
SELECT CONVERT(varchar, DATEADD(ms, @T * 1000, 0), 114)
Preparei um exemplo no Fiddle.
Qualquer dúvida, é só perguntar...
Mais Respostas
Marcos P
18/05/2015
Qual a versão do Sql Server ?
No seu exemplo a ideia é somar os valores da coluna "Total" ?
Ivanilson Almeida
18/05/2015
Registro int
Horainicio time(7)
Horafim time(7)
Total time(7)
Data datetime2(7)
Motivo nvarchar(MAX)
SQL/2014
Peço desculpa pelo minha Falta de atenção é a primeira vez que uso um Fórum
Ivanilson Almeida
18/05/2015
Desculpa pelo incomodo Obrigado
Marcos P
18/05/2015
Na parte de programação não consigo te auxiliar, mas, pelo menos, você já sabe como fazer a query no banco de dados.
Tente mudar a TAG do post para alguma linguagem do forum ou abrir um novo tópico nesse sentido...
Ivanilson Almeida
18/05/2015
Ivanilson Almeida
18/05/2015
ex: um registro tem mais de 24:00 tipo ele tem 36:00 horas como fazer para visualizar ?
Marcos P
18/05/2015
Ivanilson Almeida
18/05/2015
Por favor:
Marcos P
18/05/2015
Para trabalhar com horas ilimitadas, faça :
declare @T int
declare @seg decimal(18,3), @min int, @hor int
set @T = (SELECT sum(DATEPART(SECOND, [Total]) +
(DATEPART(MINUTE, [Total])* 60)+
(DATEPART(HOUR, [Total]))*3600) as 'TempoSegundos'
FROM Tabela)
set @hor = convert(int, @T /60 / 60)
set @min = convert(int, (@T / 60) - (@hor * 60 ))
set @seg = @T % 60
select convert(varchar(9), convert(int, @hor)) + ':' +
right('00' + convert(varchar(2), convert(int, @min)), 2) + ':' +
right('00' + convert(varchar(6), @seg), 6)
Coloquei novos registros no Fiddle para você testar...
Ivanilson Almeida
18/05/2015
se não for pedir muito Teria como mandar um exemplo ?
Marcos P
18/05/2015
Ivanilson Almeida
18/05/2015
Registro int
Nome nvarchar(100)
e outra é a tabela hora
Id int
Registro int
Horainicio time(7)
Horafim time(7)
Total time(7)
Data datetime2(7)
Motivo nvarchar(MAX)
Ivanilson Almeida
18/05/2015
Marcos P
18/05/2015
select hor.Registro, fic.Nome, hor.Horainicio, hor.Horafim, hor.Total, hor.Data, hor.Motivo from hora hor inner join ficha fic on ( hor.registro = fic.registro )
Registros na tabela "Hora" sem o correspondente nome na tabela "Ficha", não serão selecionados !
Ivanilson Almeida
18/05/2015
Provérbios 3:27
Ivanilson Almeida
18/05/2015
Registro int
Hora_1 time(7)
Hora_2 time(7)
Hora_3 time(7)
Hora_4 time(7)
Hora_5 time(7)
Hora_6 time(7)
Data datetime
Hora_extra_100 time(7)
Marcos P
18/05/2015
ou
deseja somar essas sete colunas ( time ) para cada uma das linhas da tabela ?
Ivanilson Almeida
18/05/2015
Marcos P
18/05/2015
Todas Horas
Totalizando as colunas ou somando todas de uma linha ?
Ivanilson Almeida
18/05/2015
Marcos P
18/05/2015
declare @T int
declare @seg decimal(18,3), @min int, @hor int
set @T = (SELECT (DATEPART(SECOND, [Hora_1]) +
(DATEPART(MINUTE, [Hora_1])* 60)+
(DATEPART(HOUR, [Hora_1]))*3600) +
(DATEPART(SECOND, [Hora_2]) +
(DATEPART(MINUTE, [Hora_2])* 60)+
(DATEPART(HOUR, [Hora_2]))*3600) +
(DATEPART(SECOND, [Hora_3]) +
(DATEPART(MINUTE, [Hora_3])* 60)+
(DATEPART(HOUR, [Hora_3]))*3600) +
(DATEPART(SECOND, [Hora_4]) +
(DATEPART(MINUTE, [Hora_4])* 60)+
(DATEPART(HOUR, [Hora_4]))*3600) +
(DATEPART(SECOND, [Hora_5]) +
(DATEPART(MINUTE, [Hora_5])* 60)+
(DATEPART(HOUR, [Hora_5]))*3600) +
(DATEPART(SECOND, [Hora_6]) +
(DATEPART(MINUTE, [Hora_6])* 60)+
(DATEPART(HOUR, [Hora_6]))*3600) +
(DATEPART(SECOND, [Hora_extra_100]) +
(DATEPART(MINUTE, [Hora_extra_100])* 60)+
(DATEPART(HOUR, [Hora_extra_100]))*3600) as 'TempoSegundos'
FROM Tabela)
set @hor = convert(int, @T /60 / 60)
set @min = convert(int, (@T / 60) - (@hor * 60 ))
set @seg = @T % 60
select convert(varchar(9), convert(int, @hor)) + ':' +
right('00' + convert(varchar(2), convert(int, @min)), 2) + ':' +
right('00' + convert(varchar(6), @seg), 6)
Marcos P
18/05/2015
Ivanilson Almeida
18/05/2015
declare @T int
declare @seg decimal(18,3), @min int, @hor int
set @T = (SELECT (DATEPART(SECOND, [Hora_1]) +
(DATEPART(MINUTE, [Hora_1])* 60)+
(DATEPART(HOUR, [Hora_1]))*3600) +
(DATEPART(SECOND, [Hora_2]) +
(DATEPART(MINUTE, [Hora_2])* 60)+
(DATEPART(HOUR, [Hora_2]))*3600) +
(DATEPART(SECOND, [Hora_3]) +
(DATEPART(MINUTE, [Hora_3])* 60)+
(DATEPART(HOUR, [Hora_3]))*3600) +
(DATEPART(SECOND, [Hora_4]) +
(DATEPART(MINUTE, [Hora_4])* 60)+
(DATEPART(HOUR, [Hora_4]))*3600) +
(DATEPART(SECOND, [Hora_5]) +
(DATEPART(MINUTE, [Hora_5])* 60)+
(DATEPART(HOUR, [Hora_5]))*3600) +
(DATEPART(SECOND, [Hora_6]) +
(DATEPART(MINUTE, [Hora_6])* 60)+
(DATEPART(HOUR, [Hora_6]))*3600) +
(DATEPART(SECOND, [Hora_extra_100]) +
(DATEPART(MINUTE, [Hora_extra_100])* 60)+
(DATEPART(HOUR, [Hora_extra_100]))*3600) as 'TempoSegundos'
FROM Tabela)
set @hor = convert(int, @T /60 / 60)
set @min = convert(int, (@T / 60) - (@hor * 60 ))
set @seg = @T % 60
select convert(varchar(9), convert(int, @hor)) + ':' +
right('00' + convert(varchar(2), convert(int, @min)), 2) + ':' +
right('00' + convert(varchar(6), @seg), 6)
A subconsulta retornou mais de 1 valor. Isso não é permitido quando a subconsulta segue um =, !=, <, <= , >, >= ou quando ela é usada como uma expressão.
Deu Essa Mensagem
Marcos P
18/05/2015
Coloque um ( WHERE ) na query acima para selecionar apenas o registro que você precisa... e tá feito !
Ivanilson Almeida
18/05/2015
Coloque um ( WHERE ) na query acima para selecionar apenas o registro que você precisa... e tá feito !
declare @seg decimal(18,3), @min int, @hor int
set @T = (SELECT (DATEPART(SECOND, [Hora_1]) +
(DATEPART(MINUTE, [Hora_1])* 60)+
(DATEPART(HOUR, [Hora_1]))*3600) +
(DATEPART(SECOND, [Hora_2]) +
(DATEPART(MINUTE, [Hora_2])* 60)+
(DATEPART(HOUR, [Hora_2]))*3600) +
(DATEPART(SECOND, [Hora_3]) +
(DATEPART(MINUTE, [Hora_3])* 60)+
(DATEPART(HOUR, [Hora_3]))*3600) +
(DATEPART(SECOND, [Hora_4]) +
(DATEPART(MINUTE, [Hora_4])* 60)+
(DATEPART(HOUR, [Hora_4]))*3600) +
(DATEPART(SECOND, [Hora_5]) +
(DATEPART(MINUTE, [Hora_5])* 60)+
(DATEPART(HOUR, [Hora_5]))*3600) +
(DATEPART(SECOND, [Hora_6]) +
(DATEPART(MINUTE, [Hora_6])* 60)+
(DATEPART(HOUR, [Hora_6]))*3600) +
(DATEPART(SECOND, [Hora_extra_100]) +
(DATEPART(MINUTE, [Hora_extra_100])* 60)+
(DATEPART(HOUR, [Hora_extra_100]))*3600) as 'TempoSegundos'
FROM ponto where registro = '10651990' and Data = '2015-06-10' )
set @hor = convert(int, @T /60 / 60)
set @min = convert(int, (@T / 60) - (@hor * 60 ))
set @seg = @T % 60
select convert(varchar(9), convert(int, @hor)) + ':' +
right('00' + convert(varchar(2), convert(int, @min)), 2) + ':' +
right('00' + convert(varchar(6), @seg), 6)
Fiz assim porem não Retornou o Valor Da Soma ?
Marcos P
18/05/2015
Ivanilson Almeida
18/05/2015
Marcos P
18/05/2015
Ivanilson Almeida
18/05/2015
Alex Lekao
18/05/2015
achei interessante o esquema que apresentou sobre as horas.
Marcos P
18/05/2015
Para resolver pesquise sobre a função ISNULL() no Sql Server e insira isso em cada uma das somas...
( se seu Sql Server for igual ao 2008 )
Estou sem tempo agora, mas posso ver isso na sequencia.
Marcos P
18/05/2015
declare @T int
declare @seg decimal(18,3), @min int, @hor int
set @T = (SELECT ISNULL((DATEPART(SECOND, [Hora_1]) +
(DATEPART(MINUTE, [Hora_1])* 60)+
(DATEPART(HOUR, [Hora_1]))*3600),0) +
ISNULL((DATEPART(SECOND, [Hora_2]) +
(DATEPART(MINUTE, [Hora_2])* 60)+
(DATEPART(HOUR, [Hora_2]))*3600),0) +
ISNULL((DATEPART(SECOND, [Hora_3]) +
(DATEPART(MINUTE, [Hora_3])* 60)+
(DATEPART(HOUR, [Hora_3]))*3600),0) +
ISNULL((DATEPART(SECOND, [Hora_4]) +
(DATEPART(MINUTE, [Hora_4])* 60)+
(DATEPART(HOUR, [Hora_4]))*3600),0) +
ISNULL((DATEPART(SECOND, [Hora_5]) +
(DATEPART(MINUTE, [Hora_5])* 60)+
(DATEPART(HOUR, [Hora_5]))*3600),0) +
ISNULL((DATEPART(SECOND, [Hora_6]) +
(DATEPART(MINUTE, [Hora_6])* 60)+
(DATEPART(HOUR, [Hora_6]))*3600),0) +
ISNULL((DATEPART(SECOND, [Hora_extra_100]) +
(DATEPART(MINUTE, [Hora_extra_100])* 60)+
(DATEPART(HOUR, [Hora_extra_100]))*3600),0) as 'TempoSegundos'
FROM ponto
WHERE registro = '10651990' and Data = '2015-06-10')
set @hor = convert(int, @T /60 / 60)
set @min = convert(int, (@T / 60) - (@hor * 60 ))
set @seg = @T % 60
select convert(varchar(9), convert(int, @hor)) + ':' +
right('00' + convert(varchar(2), convert(int, @min)), 2) + ':' +
right('00' + convert(varchar(6), @seg), 6)
Se seu Sql Server for inferior ao 2008, troque ISNULL por um case que retorne "0", sempre que a data for nula !
Marcos P
18/05/2015
A última instrução que passei resolveu ?
Ivanilson Almeida
18/05/2015
Ivanilson Almeida
18/05/2015
Marcos P
18/05/2015
O @T continua sendo gerado como NULL, mesmo com o ISNULL ?
Tentou trocar o ISNULL por um case ?
Se preferir, podemos conversar por skype ou gtalk.... coloque teu endereço aqui, que eu te chamo.
Ivanilson Almeida
18/05/2015
O @T continua sendo gerado como NULL, mesmo com o ISNULL ? <<< Sim
Tentou trocar o ISNULL por um case ? Não
Se preferir, podemos conversar por skype ou gtalk.... coloque teu endereço aqui, que eu te chamo.
Só tenho Email : ivanilsonsk8@gmail.com