Cálculo com hora e minuto

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
antonio.alex
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Ter, 03 Ago 2010 11:00 am
Localização: Monte Azul Paulista - SP
Programador

Bom dia!

Estou montando uma função e preciso montar um select onde o usuário passa um parâmetro contendo hora e minuto e o select calcule 35% a do valor contido no parâmetro.

Por exemplo: 10:00 horas * 35% = 3:50 = 3:30 minutos

Qual a melhor forma de fazer isso e qual o tipo do parâmetro que posso colocar?
Obrigado!
rogenaro
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Sex, 30 Mar 2007 7:26 pm
Localização: Londrina - PR
Rafael O. Genaro

Acredito que a melhor forma seria converter a entrada em horas e minutos (no exemplo considerei a entrada como um varchar2 no formato 'hora:minutos' ), obter o tempo em minutos, realizar o cálculo dos 35% e então converter de volta o resultado em horas, minutos e segundos:

Selecionar tudo

select tempo_em_minutos
     , intervalo "35% de Tempo em minutos"
     , trunc( intervalo / 60 ) "35% de Tempo (horas)"
     , trunc( mod( intervalo, 60 ) ) "35% de Tempo (minutos)"
     , round( mod( intervalo * 60, 60 ) ) "35% de Tempo (segundos)"
from
(
  select horas, minutos
       , ( horas * 60 ) + minutos tempo_em_minutos
       , ( ( horas * 60 ) + minutos ) * .35 intervalo
  from
  (
    select to_number( substr( tempo, 1, instr(tempo, ':')-1 ) ) horas
         , to_number( substr( tempo, instr(tempo, ':')+1 ) ) minutos
    from
    (
      select '10:49' tempo
      from   dual
    )
  )
);
dudu0566
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 74
Registrado em: Seg, 06 Ago 2007 3:59 pm
Localização: Campinas - SP
Eduardo Gomes

segue outra alternativa:

Selecionar tudo

declare
v_parametro_hora varchar2(20) := '10:00';
v_parametro_porcentagem number := 35;
v_date date;

v_minutos number := 0;
v_hora varchar2(5);

begin

  --verifica formato parametro hora
  begin
    select to_date(v_parametro_hora,'hh24:mi:ss') into v_date from dual;
  exception
    when others then
      raise_application_error(-20100,'Formato errado para o parametro hora');
  end;

  --transforma a parte hora do parametro em minutos
  v_minutos := to_number(substr(v_parametro_hora,1,2)) * 60;
  
  --soma o cálculo acima com a parte minuto do parametro
  v_minutos := v_minutos + (to_number(substr(v_parametro_hora,4,2)));


  --calcula a porcentagem
  v_minutos := (v_minutos * v_parametro_porcentagem) / 100;
  
  --transforma o cálculo acima em formato hora
  v_hora := lpad(trunc(v_minutos/60),2,'0')||':'||lpad(mod(v_minutos,60),2,'0');
  
  
  dbms_output.put_line(v_hora);


end;


--Saída
--03:30
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 14 visitantes