- Este tópico contém 7 respostas, 4 vozes e foi atualizado pela última vez 16 anos, 7 meses atrás por
leo_jf.
-
AutorPosts
-
31 de julho de 2009 às 12:53 am #88433
leo_jf
ParticipanteSrs,
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:4031 de julho de 2009 às 3:03 am #88434Leonardo Litz
ParticipanteOla chara!!
Veja se assim funcionar:
select to_date(‘0453′,’hh24:mi’) + (to_date(‘0247′,’hh24:mi’)-trunc(to_date(‘0247′,’hh24:mi’)))
from dualNeste 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
31 de julho de 2009 às 6:14 am #88439leo_jf
ParticipanteFala 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.
[]s31 de julho de 2009 às 6:29 am #88442Ishii
ParticipanteOlá,
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
31 de julho de 2009 às 6:31 am #88443Ishii
ParticipanteComplementando…
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
31 de julho de 2009 às 3:50 pm #88445Leonardo Litz
ParticipanteTenta assim:
select to_char(to_date(‘0453′,’hh24:mi’) + (to_date(‘0247′,’hh24:mi’)-trunc(to_date(‘0247′,’hh24:mi’))),’hh24mi’)
from dualVlw Leonardo Litz
31 de julho de 2009 às 5:23 pm #88449Rodrigo Mesquita
ParticipanteTrabalhar 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;31 de julho de 2009 às 9:33 pm #88465leo_jf
ParticipanteOlas 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 -
AutorPosts
- Você deve fazer login para responder a este tópico.