none
Cálculo de horas RRS feed

  • Pergunta

  • Pessoal, eu fiz uma Function que serve para uma tela para o tempo restante de um SLA.

    Mas, estou com um problema que imagino ser simples, mas, que não estou conseguindo progredir.

    O código que montei foi esse:

    CREATE function [dbo].[Calcular_Horas_Faltante] (@End   Datetime)
    Returns Varchar(13)
    Begin
    Declare @Start Datetime=SYSDATETIME()
    Declare @Hora Varchar(04)
    Declare @Min  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 + ':00'  Else @Min + ':00' End ) 
    End

    Nela eu coloco o tempo final do SLA, a função pega o datetime atual do servidor e mostra quanto tempo o setor tem para poder resolver o problema e esta funcionando bem.

    Porém, quando a data é menor que hoje, ele devolve como se fosse "negativo". 

    No caso, eu precisaria que sempre quando a data que eu enviar na função for menor que a data atual, ele devolva apenas o caractere " - ".

    Alguém poderia dar essa ajuda, por favor?


    • Editado Paulo.Sérgio sexta-feira, 21 de fevereiro de 2014 19:03 faltou palavras
    sexta-feira, 21 de fevereiro de 2014 19:01

Respostas

  • Paulo,

    Segue um modelo para você adaptar no seu código:

    alter function [dbo].[Calcular_Horas_Faltante] (@End   Datetime)
    Returns Varchar(13)
    Begin
    Declare @Start Datetime=SYSDATETIME()
    Declare @Hora Varchar(04)
    Declare @Min  Varchar(02)
    
    Declare @RET VARCHAR(13)
    
    IF DateDiff(d, GETDATE(), @End)	 < 0
    BEGIN
    	SELECT @RET = '-'
    END
    ELSE
    BEGIN 
      Select @Hora = DateDiff(n,@Start,@end)/60 ,
           @Min  = DateDiff(n,@Start,@end)%60
    
      Select @RET = Case When Len(@Hora)=1 Then '0'+@Hora Else @Hora End + ':' +
                               Case When Len(@Min)=1 Then '0' +@Min + ':00'  Else @Min + ':00' End
    END
    
    Return (@RET) 
    End
    GO

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Marcado como Resposta Giovani Cr segunda-feira, 24 de fevereiro de 2014 12:20
    sexta-feira, 21 de fevereiro de 2014 19:29
    Moderador

Todas as Respostas

  • Paulo,

    Segue um modelo para você adaptar no seu código:

    alter function [dbo].[Calcular_Horas_Faltante] (@End   Datetime)
    Returns Varchar(13)
    Begin
    Declare @Start Datetime=SYSDATETIME()
    Declare @Hora Varchar(04)
    Declare @Min  Varchar(02)
    
    Declare @RET VARCHAR(13)
    
    IF DateDiff(d, GETDATE(), @End)	 < 0
    BEGIN
    	SELECT @RET = '-'
    END
    ELSE
    BEGIN 
      Select @Hora = DateDiff(n,@Start,@end)/60 ,
           @Min  = DateDiff(n,@Start,@end)%60
    
      Select @RET = Case When Len(@Hora)=1 Then '0'+@Hora Else @Hora End + ':' +
                               Case When Len(@Min)=1 Then '0' +@Min + ':00'  Else @Min + ':00' End
    END
    
    Return (@RET) 
    End
    GO

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Marcado como Resposta Giovani Cr segunda-feira, 24 de fevereiro de 2014 12:20
    sexta-feira, 21 de fevereiro de 2014 19:29
    Moderador
  • Ajudou muito, obrigado pela ajuda!
    segunda-feira, 24 de fevereiro de 2014 17:20