none
Coluna calculada - Horas RRS feed

  • Pergunta

  • Bom dia senhores,

     

    Estou trabalhando de uma tabela que armazena id_usuario, id_processo, h_final (datetime), h_inicial (datetime) e h_total (date_time). Esta última tem a seguinte fórmula: ([h_final]-[h_inicial]), e este campo é datetime.

     

    Durante a inclusão dos dados, a coluna calculada (h_total) cumpre seu papel perfeitamente incluíndo o valor calculado assim: 01/01/1990 00:40:00 (hipotéticamente o usuário 1 trabalhou 40 minutos).

     

    Agora estou precisando de um relatório e estou usando a seguinte SELECT:

     

    SELECT     SUM({ fn HOUR(h_total) }) AS CargaHoraria, id_usuario, id_jobProcesso
    FROM         JobHProcesso
    WHERE     (id_usuario = 1)
    GROUP BY id_usuario, id_jobProcesso

     

    O resultado vem do total das horas (3), e não estou conseguindo devolver em CargaHoraria o total no formato: 03:15 (se este for o acúmulo de horas para um determinado usuário). Porém, fatalmente em alguns processos a hora vai exceder as 24, ainda assim, seria possivel exibir no formato: 46:21 ? Não é necessário exibir os segundos. 

     

    Agradeço.

     

    sexta-feira, 6 de julho de 2007 13:08

Respostas

  • o erro deve estar aqui

     

    DateDiff(n,@Start,@end)/60

     

    altere para

     

    DateDiff(n,@Start,@end)%60 -- o modulo da divisao por 60 sao os minutos

     

     

    Abs/

     

    • Marcado como Resposta Aguilera, L quarta-feira, 28 de abril de 2010 20:59
    sexta-feira, 6 de julho de 2007 14:46

Todas as Respostas

  •  

    veja se e isso

     

    CREATE function Ufn_Horas (@Start Datetime, @End   Datetime)
    Returns Varchar(10)
    Begin
    Declare @Hora      Varchar(04)
    Declare @Min       Varchar(02)
    Declare @Segundos  Varchar(02)

    Select @Hora     = DateDiff(n,@Start,@end)/60 ,
           @Min      = DateDiff(n,@Start,@end)/60


    Return (Select Case When Len(@Hora)=1 Then '0'+@Hora Else @Hora End + ':' +
                   Case When Len(@Min)=1 Then '0'+@Min Else @Min End )

    End

     

    Select dbo.Ufn_horas('2007-07-10 10:00','2007-07-11 11:00')

     

    Abs;

    sexta-feira, 6 de julho de 2007 13:20
  • Olá Marcelo, obrigado pela pronta resposta, mas a função retorna os valores montados de forma errada, por exemplo, os processos que duraram menos de uma hora, eu tenho o seguinte retorno: 01:01.

     

    O cálculo das horas por processo, a coluna calculada já esta fazendo corretamente, o que preciso é calcular a coluna h_total. Ou seja, ao final do dia, meu Select vai consultar o acumulo da coluna h_total para o usuario 1, por exemplo, e este calculo que não consigo exibir corretamente. Como se fosse uma SUM, mas esta não funciona.

    sexta-feira, 6 de julho de 2007 13:37
  • o erro deve estar aqui

     

    DateDiff(n,@Start,@end)/60

     

    altere para

     

    DateDiff(n,@Start,@end)%60 -- o modulo da divisao por 60 sao os minutos

     

     

    Abs/

     

    • Marcado como Resposta Aguilera, L quarta-feira, 28 de abril de 2010 20:59
    sexta-feira, 6 de julho de 2007 14:46