Ajuda !!! comparar valor aproximado

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
diegorp
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Seg, 23 Mar 2009 10:44 am
Localização: Sapiranga - RS

Bom dia.
Preciso fazer uma comparação de datas, exemplo:

posso ter varias datas

01/01/2010
20/02/2010
25/03/2010
28/03/2010

ai eu vou ter uma data que vai entrar no parametro, exemplo 23/03/2010, então eu preciso comparar qual das datas na lista esta mais próxima à baixo ou igual a data 23/03/2010. Como poderia fazer isso?

Obrigado.
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Uma forma de fazer:

Selecionar tudo

SQL> with t as (
  2  select to_date('01/01/2010', 'DD/MM/YYYY') dt from dual union all
  3  select to_date('20/02/2010', 'DD/MM/YYYY') dt from dual union all
  4  select to_date('25/03/2010', 'DD/MM/YYYY') dt from dual union all
  5  select to_date('28/03/2010', 'DD/MM/YYYY') dt from dual)
  6  -- fim dos dados de exemplo
  7  select max(dt) max_dt, dt_param
  8    from (select dt, (select to_date('23/03/2010', 'DD/MM/YYYY') from dual) dt_param
  9            from t)
 10   where dt <= dt_param
 11   group by dt_param;
 
MAX_DT      DT_PARAM
----------- -----------
20/2/2010   23/3/2010
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

vai fazer um loop percorrendo a lista.. vai diminuir as datas afim de ter a diferença entre elas e depois ver qual diferença e menor

Selecionar tudo

...
select sysdate  - add_months(sysdate,1) into menorDataTemp from dual;

if (menorDataTemp > menorData) then
   menorDataTemp := menorData;
...
Responder
  • Informação