none
Divisão entre datas RRS feed

  • Pergunta

  • Pessoal, boa noite!

    Tenho a seguinte situação, tenho em uma tabela a [data de inicio] e a [data de fim] e através da funnção gedtdate() pego a [data atual].

    eu preciso saber a porcentagem que o a [data atual] está em relação a a [data de fim], reproduzi primeiramente no excel e consegui um resultado satisfatório, porém ao transportar isto par ao sql não deu certo, é exibida a mensagem de erro informando que não é possivel dividir datas.

    Estou faznedo o cálculo desta forma: (getdate()-[data de inicio])/([data de resposta]) as campo

    Algum de vocês já viu algo parecido?

    Obrigado,


    Luis Fernando Consultor de Tecnologia

    quarta-feira, 16 de maio de 2012 22:47

Todas as Respostas

  • Luis,

    Não sei se entendi direito o que você quer, mas vê se o exemplo que criei te ajuda:

    CREATE TABLE #Datas
    	(
    		DataInicio DATETIME, 
    		DataFim DATETIME
    	)
    GO
    
    INSERT INTO #Datas VALUES
    ('2011-05-05', '2012-10-05'),
    ('2011-06-05', '2012-11-05'),
    ('2011-07-05', '2012-10-05')
    
    
    ;WITH PercDatas AS
    (
    	SELECT DataInicio, 
    		   DataFim,
    		   DATEDIFF(DAY, DataInicio, GETDATE()) Dif1,
    		   DATEDIFF(DAY, DataInicio, DataFim)   Dif2
    	  FROM #Datas
    )
    
    SELECT DataInicio       				  AS 'Inicio'   ,
    	   DataFim					  AS 'Fim'      ,
    	   Dif1						  AS 'DifInicio',
    	   Dif2						  AS 'DifFim',
    	   (CONVERT(NUMERIC(12,2), 
    				Dif1*1e0/Dif2*1e0)) * 100 AS '%'
      FROM PercDatas

    Resultado:

    Inicio                      Fim                        DifInicio   DifFim      %
    ----------------------- ----------------------- ----------- ----------- ---------------------------------------
    2011-05-05 00:00:00.000 2012-10-05 00:00:00.000 378         519         73.00
    2011-06-05 00:00:00.000 2012-11-05 00:00:00.000 347         519         67.00
    2011-07-05 00:00:00.000 2012-10-05 00:00:00.000 317         458         69.00


    []'s
    Philipe Souza
    E-mail: Philipe.s.souza@hotmail.com


    quinta-feira, 17 de maio de 2012 04:20
  • Philipe, boa tarde!

    Primeiramente muito obrigado pelo apoio.

    Adaptei o seu exemplo para o meu banco, porém o resultoado foi:

    Msg 8134, Level 16, State 1, Line 2

    Divide by zero error encountered.

    Não se é pq eu estou usando a data completa ( 2012-05-01 10:05:00.000), será que pode ser isso?

    Obrigado,


    Luis Fernando Consultor de Tecnologia

    quinta-feira, 17 de maio de 2012 17:19
  • Luis,

    Esse erro ocorre quando tentamos dividir algum número por zero. O que pode ter acontecido é sua data inicio e data fim serem iguais, e o a diferença entre elas deu 0 dias.

    Poderia informar a data inicio e data fim que vc está usando?


    []'s
    Philipe Souza
    E-mail: Philipe.s.souza@hotmail.com

    quinta-feira, 17 de maio de 2012 17:43
  • Philipe,

    Ele pega a data de inicio e fim do sistema, não tem como as duas serem iguais, pois a data de fim é igual a data de inicio + xx tempo que eu configuro no sistema, na tela do sistema conigo visualizar que as datas não são iguais..

    Obrigado,


    Luis Fernando Consultor de Tecnologia

    quinta-feira, 17 de maio de 2012 20:26
  • Luis,

    Então posta aqui os valores que estão gerando o erro pra gente tentar ver qual é o problema.


    []'s
    Philipe Souza
    E-mail: Philipe.s.souza@hotmail.com

    sexta-feira, 18 de maio de 2012 00:22