Duvidas Somar horas

25/07/2017

0

Boa Tarde!
tenho a sentença

SELECT
DBO.FNCALCULATEMPO(INICIO,FIM)'HORAS ABONADAS'
FROM AOCORRENCIACALCULADA
LEFT JOIN ATIPOOCORRENCIA ON AOCORRENCIACALCULADA.TIPOOCORRENCIA = ATIPOOCORRENCIA.TIPOOCORRENCIA
WHERE CHAPA = '2182'
and INICIO >='2017-07-15'
ORDER BY INICIO

onde a mesma me retorna 3 linhas com as seguintes informações:

03:00:00
01:00:00
07:00:00

que são as horas abonadas, ao invés de trazer uma em cada linha gostaria de somar a mesma e me retornar em apenas uma linha com
o total de 11:00:00.

mas quando uso

SELECT
SUM(DBO.FNCALCULATEMPO(INICIO,FIM))'HORAS ABONADAS'
FROM AOCORRENCIACALCULADA
LEFT JOIN ATIPOOCORRENCIA ON AOCORRENCIACALCULADA.TIPOOCORRENCIA = ATIPOOCORRENCIA.TIPOOCORRENCIA
WHERE CHAPA = '2182'
AND INICIO >='2017-07-15'
ORDER BY INICIO
ele da o erro

'Mensagem 8117, Nível 16, Estado 1, Linha 2 Operand data type varchar is invalid for sum operator.'

como eu consigo somar estas horas?
A funcão DBO.FNCALCULATEMPO é composta pelo seguinte script:

USE [Corporerm]
GO
/****** Object: UserDefinedFunction [dbo].[fnCalculaTempo] Script Date: 07/25/2017 16:12:56 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[fnCalculaTempo]
(
@antes DATETIME, @depois DATETIME
)
RETURNS VARCHAR(20)
AS
BEGIN
DECLARE @temp DATETIME;
IF (@antes > @depois)
BEGIN
SET @temp = @antes;
SET @antes = @depois;
SET @depois = @temp;
END
RETURN CASE WHEN @temp IS NULL THEN '' ELSE '-' END
+ CASE WHEN DATEDIFF(SECOND, @antes, @depois) / 60 / 60 >=24
THEN CONVERT(VARCHAR, ABS(DATEDIFF(SECOND, @antes, @depois) / 60 / 60 / 24)) + 'd+ '
ELSE '' END
+ RIGHT('00' + CONVERT(VARCHAR, ABS(((DATEDIFF(SECOND, @antes, @depois) / 60) / 60) % 24)), 2) + ':'
+ RIGHT('00' + CONVERT(VARCHAR, ABS((DATEDIFF(SECOND, @antes, @depois) / 60) % 60)), 2) + ':'
+ RIGHT('00' + CONVERT(VARCHAR, ABS(DATEDIFF(SECOND, @antes, @depois) % 60)), 2);
END
Leandro Pinto

Leandro Pinto

Responder

Posts

04/08/2017

Luiz Vichiatto

O que você quer fazer é um agrupamento das horas, pois bem, você deve adicionar um campo para que o sql possa agrupar, por exemplo a matricula ou um código que se repita igualmente a todas as tuplas
SELECT  MATICULA,
DBO.FNCALCULATEMPO(INICIO,FIM)'HORAS ABONADAS'
FROM AOCORRENCIACALCULADA
LEFT JOIN ATIPOOCORRENCIA ON AOCORRENCIACALCULADA.TIPOOCORRENCIA = ATIPOOCORRENCIA.TIPOOCORRENCIA
WHERE CHAPA = '2182'
and INICIO >='2017-07-15'	
group by MATRICULA

Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar