none
Como faço para calcular somente às horas, os minutos e segundos de um campo DateTime

    Pergunta

  • Boa Tarde...!!!

    preciso calcular o tempo de separação de um usuário.

    Tenho os campos abaixo:

    ============================

    Usuario|             DataInicio                |                DataFim               |

    Lucas   |2013-12-12 11:24:56.000 | 2013-12-12 11:25:49.000 |

    ============================

    Estou convertendo os campos de Data da seguinte forma abaixo:

    CONVERT(CHAR(8), DataInicio, 114) AS 'INICIO SEPARAÇÃO', 
    CONVERT(CHAR(8), DataFim, 114) AS 'FIM SEPARAÇÃO'

    Me retorna:

    ================

    | DataInicio |   DataFim  |

    | 11:24:56 | 11:25:49 |

    ================

    Estou Calculando dessa forma mas não esta me retornando o valor correto:

    (CONVERT(FLOAT(8), DataFim, 114))  AS 'DATAFIM CONVERTIDA',

    (CONVERT(FLOAT(8), DataInicio, 114)) AS 'DATAINICIO CONVERTIDA',

    (CONVERT(FLOAT(8), DataFim, 114)) - (CONVERT(FLOAT(8), DataInicio, 114)) AS 'TEMPO GASTO'

    Me retorna:

    ===========================

    | DATAFIM CONVERTIDA|   DATAINICIO CONVERTIDA| TEMPO GASTO |

    |        41618,48            |              41618,48            |          0            |

    ===========================

    VEJO QUE O PROBLEMA AÍ ESTA NA CONVERSÃO, JA TENTEI COM VÁRIOS TIPOS DE MAS NÃO ESTA FUNCIONANDO,

    CASO ALGUÉM POSSA ME AJUDAR, FICO MUITO AGRADECIDO.... 

    quinta-feira, 12 de dezembro de 2013 14:32

Respostas

Todas as Respostas

  • Use a função DATEDIFF para calcular a diferença em segundos assim:

    DATEDIFF(SS, DataInicio, DataFim)

    em seguida faça a conversão de segundos para HH:mm:ss

    http://stackoverflow.com/questions/14116821/converting-seconds-into-hhmmss-format

    Abraço!


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    quinta-feira, 12 de dezembro de 2013 14:56
  • Se for SQL 2012, converte pra TIME ao invés de float e utiliza o datediff

    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    quinta-feira, 12 de dezembro de 2013 16:24
    Moderador
  • Cara, você pode extrair essa informação da seguinte maneira:

    SELECT CONVERT(CHAR(2),((DATEDIFF(SECOND,@datainicio,@datafim)/60)/60))+':'+CONVERT(CHAR(2),((DATEDIFF(SECOND,@datainicio,@datafim)/60)%60))+':'+CONVERT(CHAR(2),(DATEDIFF(SECOND,@datainicio,@datafim)%60))

    Obs.: Substitui as variaveis @datainicio pela coluna DataInicio e @datafim pela coluna DataFim. O retorno será no formato "HH:mm:ss"

    Qualquer dúvida, é só perguntar. Valeu !!! 

    quinta-feira, 12 de dezembro de 2013 16:25
  • "Gilguitar", a forma mais simples e imediata de calcular o tempo de separação é como o Kanaãm sugeriu. Principalmente se a unidade de tempo desejada é segundos.

    Se for necessário converter o tempo de separação para o formato h:mm:ss, as opções são várias, como algumas que constam no link sugerido pelo Kanaãm.


        José Diz     Belo Horizonte, MG - Brasil


    • Editado Jose.Diz quinta-feira, 12 de dezembro de 2013 17:08
    quinta-feira, 12 de dezembro de 2013 17:02
  • Romero, meu brother, obrigado pela resposta.

    Fiz da forma abaixo e deu certinho.

    ==============================

    CONVERT(VARCHAR, DATEDIFF(HOUR, DataInicio, DataFim), 108) + ' : ' +
    CONVERT(VARCHAR, DATEDIFF(MINUTE, DataInicio, DataFim), 108) + ' : ' +
    CONVERT(VARCHAR, DATEDIFF(SECOND, DataInicio, DataFim), 108) as 'Tempo Gasto'

    ==============================

    Mais uma vez muito Obrigado....!

    quinta-feira, 12 de dezembro de 2013 19:49
  • Opa, por nada.

    Se puder marque minha resposta para fechar seu tópico.

    Abraço!


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    quinta-feira, 12 de dezembro de 2013 19:53
  • GETULIO meu brother, da forma que você passou funcionou corretamente, pois é calculada a diferença exata da DataInicial e DataFinal.

    ========================

    SELECT CONVERT(CHAR(2),((DATEDIFF(SECOND,@datainicio,@datafim)/60)/60))+':'+CONVERT(CHAR(2),((DATEDIFF(SECOND,@datainicio,@datafim)/60)%60))+':'+CONVERT(CHAR(2),(DATEDIFF(SECOND,@datainicio,@datafim)%60))

     ========================

    Agradeço pela forma meu camarada.... muito Grato...!

    sexta-feira, 13 de dezembro de 2013 19:29
  • Só não entendi direito como é feito nessa fórmula, gostaria muito de saber, mas se não for possível a explicação agradeço da mesma forma....
    sexta-feira, 13 de dezembro de 2013 19:32
  • Gilguitar, Boa Noite !

    Lógico que posso explicar a fórmula com foi escrito a consulta, mas antes gostaria de esclarecer algumas coisas em relação a consulta que você está utilizando para retornar no formato "HH:mm:ss".

    Seu Script:

    CONVERT(VARCHAR, DATEDIFF(HOUR, DataInicio, DataFim), 108) + ' : ' +
    CONVERT(VARCHAR, DATEDIFF(MINUTE, DataInicio, DataFim), 108) + ' : ' +
    CONVERT(VARCHAR, DATEDIFF(SECOND, DataInicio, DataFim), 108) as 'Tempo Gasto'

    O retorno está sendo o tempo total em horas, minutos e segundos e não a diferença entre a "DataInicio" e a "DataFim", da seguinte forma:

    DATAINICIO   = '2013-12-15 21:56:14.227'
    DATAFIM   = '2013-12-15 23:56:14.227'
     

    1. Calculando a diferença em horas

    CONVERT(VARCHAR, DATEDIFF(HOUR, DataInicio, DataFim), 108) = 2 horas

    2. Calculando a diferença em minutos

    CONVERT(VARCHAR, DATEDIFF(MINUTE, DataInicio, DataFim), 108) = 120 minutos(igual a 2 horas)

    3. Calculando a diferença em segundos

    CONVERT(VARCHAR, DATEDIFF(SECOND, DataInicio, DataFim), 108) = 7200 segundos(igual a 2 horas ou 120 minutos)

    Dessa forma a representação final ficará assim : "2 : 120 : 7200" 

    ---------------------------------------------------------------------------------------------------------

    Agora a forma que passei calcula da seguinte forma:

    @DATAINICIO   = '2013-12-15 21:56:14.227'
    @DATAFIM   = '2013-12-15 23:57:15.227'

    SELECT

    CONVERT(CHAR(2),((DATEDIFF(SECOND,@datainicio,@datafim)/60)/60))+':'+CONVERT(CHAR(2),((DATEDIFF(SECOND,@datainicio,@datafim)/60)%60))+':'+CONVERT(CHAR(2),(DATEDIFF(SECOND,@datainicio,@datafim)%60))

    1. Calcula a diferença em horas, retornando somente o valor inteiro em horas:

    CONVERT(CHAR(2),((DATEDIFF(SECOND,@datainicio,@datafim)/60)/60)) = (7261/60) = (120/60) = 2 horas

    2. Calcula a diferença somente dos minutos que restarão:

    CONVERT(CHAR(2),((DATEDIFF(SECOND,@datainicio,@datafim)/60)%60)) = (7261/60) = (121%60) = 01 minutos(o simbolo "%" devolve o resto)

    3. Calcula a diferença somente dos segundos restantes:CONVERT(CHAR(2),(DATEDIFF(SECOND,@datainicio,@datafim)%60)) = (7261%60) = 01 segundos

    segunda-feira, 16 de dezembro de 2013 01:11