Problemas com Datas

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
asarmento
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Qui, 27 Abr 2006 8:50 pm
Localização: Salvador - BA
Álvaro Sarmento
Analista de Sistemas
Unitech - Tecnologia de Informação
www.unitech.com.br

Pessoal,

Preciso testar se um período 1 está dentro de um período 2! Já tentei usar o >= <= e o between, mas sempre falha em algum ponto.

Ex: Período 1: 08/03/2006 a 30/06/2006

Período 2: 01/04/2006 a 30/04/2006

Alguém tem alguma idéia??

Atenciosamente,
mello
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 15
Registrado em: Seg, 06 Mar 2006 5:26 pm
Localização: sp

Selecionar tudo

CREATE OR REPLACE FUNCTION INTERSECAO(VDATA1 IN DATE, -- Início do período que se deseja validar
                                         VDATA2 IN DATE, -- Término do período que se deseja validar
                                         VDATA3 IN DATE, -- Início do intervalo 
                                         VDATA4 IN DATE, -- Término do intervalo
                                         PDATAHORA IN VARCHAR2 DEFAULT 'N'
                                        ) RETURN VARCHAR2 IS

 VDATAAUX  DATE;
 VDATAaux2 DATE;
 VDATAFIM  DATE;

BEGIN
 IF     VDATA2 IS NULL
        THEN if  PDATAHORA = 'N'
                 then VDATAaux2:= TO_DATE('31/12/2999',      'DD/MM/YYYY');
                 else VDATAaux2:= TO_DATE('31/12/2999 23:59','DD/MM/YYYY HH24:MI');
             end if;
        else VDATAaux2:= VDATA2;
 END    IF;

 IF     VDATA4 IS NULL
        THEN if  PDATAHORA = 'N'
                 then VDATAFIM := TO_DATE('31/12/2999',      'DD/MM/YYYY');
                 else VDATAFIM := TO_DATE('31/12/2999 23:59','DD/MM/YYYY HH24:MI');
             end if;
        ELSE VDATAFIM := VDATA4;
 END    IF;

 if     (vdata3 <= vdataaux2
 and    (vdata4 >= vdata1
 or      vdata4 >= vdata1
 and     vdata4 <= vdataaux2
 or      vdata4 is null)) or
        (vdata3 >  vdata1 and  vdata4 is null   and vdata2 is null)
        then RETURN 'TRUE';
        else RETURN 'FALSE';
  end   if;

END;
asarmento
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Qui, 27 Abr 2006 8:50 pm
Localização: Salvador - BA
Álvaro Sarmento
Analista de Sistemas
Unitech - Tecnologia de Informação
www.unitech.com.br

Caro Mello,

Valeu pela função!!

Vou testá-la imediatamente!!

Abração
Responder
  • Informação
  • Quem está online

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