Pular para o conteúdo
Visualizando 8 posts - 1 até 8 (de 8 do total)
  • Autor
    Posts
  • #88433
    leo_jf
    Participante

      Srs,
      Alguem saberia se é possível converter um valor numerico para horas e depois somar.
      No banco tenho esses valores numericos:
      Exemplo: 0453 + 0247;
      Que seria 04:53 e 02:47 e preciso do resultado: 07:40

      #88434
      Avatar photoLeonardo Litz
      Participante

        Ola chara!!

        Veja se assim funcionar:

        select to_date(‘0453′,’hh24:mi’) + (to_date(‘0247′,’hh24:mi’)-trunc(to_date(‘0247′,’hh24:mi’)))
        from dual

        Neste algoritmo,l adiciono as horas e minutos em algum dia, como nao eh possivel soma de datas, subtraio da data com as horas e minutos adicionados por uma data sem horas, onde sera gerado um valor centesimal dos minutos, logo, depois adiciono a data da primeira hora.

        Eh meio enrolado, mas eh a forma que encontrei, creio que tenha alguma funcao que ja faca isso no oracle. Mesmo assim, segue. Qualquer coisa coloque em uma funcao para facilitar o seu trabalho.

        Vlw Leonardo Litz

        #88439
        leo_jf
        Participante

          Fala Chara,

          Infelizmente ja tinha tentado dessa forma e não me ajudou.
          Preciso que seja devolvido o valor 0740, na verdade, pois esse valor gravo em uma coluna de total em forma de number(4). So qdo gero o relatorio que uso uma mascara para mostrar 07:40;
          O problema todo é que mostrei um exemplo de valores aqui, mas no relatorio que gerei com 30 dias de acesso, apenas 4 valores que não estavam corretos. Vai se saber o por que. Enfim.
          Se tiver uma outra dica, agradeço muito.
          []s

          #88442
          Ishii
          Participante

            Olá,

            Então vamos a POG:
            select regexp_replace(to_char(to_date('0453','hh24:mi') + (to_date('0247','hh24:mi')-trunc(to_date('0247','hh24:mi'))),'hh24:mi' ),'[[:punct:]]','')
            from dual

            []s Ishii

            #88443
            Ishii
            Participante

              Complementando…

              Se quiser em valores numéricos use o to_number:
              select to_number(regexp_replace(to_char(to_date('0453','hh24:mi') + (to_date('0247','hh24:mi')-trunc(to_date('0247','hh24:mi'))),'hh24:mi' ),'[[:punct:]]',''))
              from dual

              []s Ishii

              #88445
              Avatar photoLeonardo Litz
              Participante

                Tenta assim:

                select to_char(to_date(‘0453′,’hh24:mi’) + (to_date(‘0247′,’hh24:mi’)-trunc(to_date(‘0247′,’hh24:mi’))),’hh24mi’)
                from dual

                Vlw Leonardo Litz

                #88449
                Rodrigo Mesquita
                Participante

                  Trabalhar com horas sempre é trabalhoso…No dia que o oracle tratar a soma das oracle nosso trabalhar vai ser bem facilitado, mais por enquanto vamos as “alternativas” hehe

                  olha essa funcao aqui, acho q te ajuda

                  Function Soma_Horas(Phora1 In Number, Phora2 In Number)
                  Return Varchar2 Is
                  Vhora1 Varchar2(4) := Lpad(Phora1, 4, 0);
                  Vhora2 Varchar2(4) := Lpad(Phora2, 4, 0);
                  Vsegundos Number;
                  Vhora Varchar2(10);
                  Begin
                  — Transforma tudo em minutos
                  Vsegundos := ((Substr(Vhora1, 1, 2) * 60) + Substr(Phora1, 2, 2) +
                  (Substr(Vhora2, 1, 2) * 60) + Substr(Phora1, 2, 2)) * 60;
                  Vhora := To_Char(Trunc(Vsegundos / 60 / 60), ’09’);
                  If Round(Vhora) > 24 Then
                  Vhora := Vhora – 25 || To_Char(Trunc(Mod(Vsegundos, 3600) / 60), ’09’) ||
                  To_Char(Mod(Mod(Vsegundos, 3600), 60), ’09’);
                  Else
                  Vhora := To_Char(Trunc(Vsegundos / 60 / 60), ’09’) ||
                  To_Char(Trunc(Mod(Vsegundos, 3600) / 60), ’09’) ||
                  To_Char(Mod(Mod(Vsegundos, 3600), 60), ’09’);
                  End If;
                  Return Vhora;
                  End;

                  #88465
                  leo_jf
                  Participante

                    Olas a todos,
                    Valew a todos pela ajuda.

                    A dica do Litz me ajudou ( tinha feito algo parecido, mas em algum momento tava me perdendo e não vinha o resultado correto).

                    Ishii,
                    essa função não funcionou para mim, pois aqui o banco é 9i, mas obrigado pela dica.

                    Rodrigo,

                    Criei a função que você me passou, mas o retorno é 07 46 00 e não 07 40
                    De qq forma, obrigado a todos pela atenção e ajuda.
                    []s

                  Visualizando 8 posts - 1 até 8 (de 8 do total)
                  • Você deve fazer login para responder a este tópico.