none
calculo dias,horas,minutos

    Question

  •  

    Pessoal,

    Ja pesquisei, tentei, porem não consegui, e por isso recorro aqui,

    tenho dois campos de uma tabela Data_inicio tipo Char(20), e Hora_inicio Tipo Char(20),

    Não posso mudar estes campos para DateTime.

    o que eu preciso eh calcular a quantidade de Dias, Horas e Minutos destes campos.

    como fazer? alguem pode me ajudar?

    Thursday, August 14, 2008 3:58 PM

All replies

  • Maricelmo,

     

    Mas como esta sendo armazenado estes valores dentro destes campos?

     

    Por que você não poderá converte-los para DateTime?

     

    O SQL Server trabalhar com várias funções para datatypes Datetime, sendo uma delas chamada DateDiff, responsável em realizar o calculo entre datas e horas de diversas maneiras, com certeza esta função poderia te ajudar!!!

     

    Thursday, August 14, 2008 4:39 PM
  • Boa Tarde,

     

    É realmente uma pena, pois, esses tipos de dados irão sempre exigir validações extras e conversões desnecessárias. Em todo o caso, segue uma proposta baseada no SQL Server 2005.

     

    Code Snippet

    -- Criação da tabela

    CREATE TABLE tblHorario (

    IdFuncionario INT,

    DataHoraInicio CHAR(20),

    DataHoraFim CHAR(20))

     

    -- Inserção dos registros

    INSERT INTO tblHorario VALUES (1,'12/05/2008 10:00','25/07/2008 12:30')

    INSERT INTO tblHorario VALUES (2,'15/06/2008 09:15','07/08/2008 15:44')

    INSERT INTO tblHorario VALUES (3,'30/05/2008 10:00','23/07/2008 20:12')

     

    -- Conversão para os tipos SMALLDATETIME

    WITH Res AS (

    SELECT IDFuncionario,

    CONVERT(SMALLDATETIME,DataHoraInicio,103) AS Inicio,

    CONVERT(SMALLDATETIME,DataHoraFim,103) AS Fim

    FROM tblHorario)

     

    SELECT IDFuncionario, Inicio, Fim

    FROM Res

     

    -- Cálculo das diferenças

    WITH Res AS (

    SELECT IDFuncionario,

    CONVERT(SMALLDATETIME,DataHoraInicio,103) AS Inicio,

    CONVERT(SMALLDATETIME,DataHoraFim,103) AS Fim

    FROM tblHorario),

     

    DifD AS (

    SELECT IDFuncionario, Inicio, Fim,

    DATEDIFF(DD,Inicio,Fim) AS DifDias,

    DATEDIFF(HH,Inicio,Fim) AS DifHoras

    FROM Res)

     

    SELECT * FROM DifD

     

     

    [ ]s,

     

    Gustavo

    Thursday, August 14, 2008 4:47 PM
    Moderator
  • Ola Junior,

    Na verdade ja existe um BD criado com estes campos, foi um sistema de ordem de servico adquirido aqui pela empresa e adaptado para as nossas necessidades, porem agora houve a necessidades de saber quantos dias, horas e minutos uma ordem de servico estava parado, dai foi que eu verifique que os dados estão armazenados desta forma:

    campo Data_Inicio = 14/08/2008

    campo Hora_Inicio = 13:10

    assim mesmo, desta forma escrita ai.

    Thursday, August 14, 2008 5:09 PM
  • Olá Maricelmo,

     

    Se essa foi a forma que foi modelado... Espero que não surjam outros problemas. Segue uma proposta.

     

    Code Snippet

    DECLARE @tbl TABLE (Data_Inicio CHAR(20), Hora_Inicio CHAR(20))

     

    INSERT INTO @tbl VALUES ('14/08/2008', '13:10')

     

    SELECT

    DATEDIFF(D,

    CONVERT(SMALLDATETIME,Data_Inicio + ' ' + Hora_Inicio,103),

    GETDATE()) AS DiasAbertos,

     

    DATEDIFF(HH,

    CONVERT(SMALLDATETIME,Data_Inicio + ' ' + Hora_Inicio,103),

    GETDATE()) AS HorasAbertas,

     

    DATEDIFF(MI,

    CONVERT(SMALLDATETIME,Data_Inicio + ' ' + Hora_Inicio,103),

    GETDATE()) AS MinutosAbertos

    FROM

    @tbl

     

    [ ]s,

     

    Gustavo

    Thursday, August 14, 2008 5:24 PM
    Moderator
  • Gustavo,

     

    Mas o Maricelmo informou que não poderia realizar a conversão para DateTime!!!

     

    Thursday, August 14, 2008 5:38 PM
  • Oi Jr.

     

    Eu entendi que ele não pode alterar o tipo de dados na tabela, mas na Query eu não vejo porque existir tal limitação. Bom, vamos ver o que ele responde das propostas...

     

    [ ]s,

     

    Gustavo

    Thursday, August 14, 2008 5:44 PM
    Moderator
  • Ola, pessoal

    Desculpa por não ter respondido antes, eh que eu so tenho internet no trabalho,

    mas gostaria de agradecer a todos que me responderam, e eh exatamente isto

    o que o Gustavo escreveu, no BD nao posso alterar o tipo do campo, porem na

    query eu posso.

    Maricelmo.

    Friday, August 15, 2008 1:13 PM
  • Pessoal, estou colocando aqui o codigo: em ASP

     

     <%H_I = dados("Hora_inicio")
     D_I = dados("Data_inicio")
     duracao = DateDiff("n",H_I,time())
     dia_duracao = DateDiff("d",D_I,date())
     horas = int(duracao / 60 )
     minutos = duracao mod 60


    hora_inicio = 23/10/2007
    data_inicio = 08:16:12

    Resultado:

    DiasAbertaos          HorasAbertas             MinutosAbertos

         297 dias                 1h                               21m.


    SQL SERVER

    SELECT
    DATEDIFF(D,
    CONVERT(SMALLDATETIME,Data_Inicio + ' ' + Hora_Inicio,103),GETDATE()) AS DiasAbertos,
    DATEDIFF(HH,
    CONVERT(SMALLDATETIME,Data_Inicio + ' ' + Hora_Inicio,103),GETDATE())/60 AS HorasAbertas,
    DATEDIFF(MI,
    CONVERT(SMALLDATETIME,Data_Inicio + ' ' + Hora_Inicio,103),GETDATE())%60 AS MinutosAbertos
    From Ordem Where id_chamado = 8152

    Resultado:

    DiasAbertos       HorasAbertas        MinutosAbertos

        297                     118                      21

     

     

    Friday, August 15, 2008 1:37 PM