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
  

Mensagemem Qui, 27 Abr 2006 9:30 pm

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,
asarmento
Localização: Salvador - BA

Álvaro Sarmento
Analista de Sistemas
Unitech - Tecnologia de Informação
www.unitech.com.br

Mensagemem Sex, 28 Abr 2006 8:59 am

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;
mello
Localização: sp

Mensagemem Sex, 28 Abr 2006 9:31 am

Caro Mello,

Valeu pela função!!

Vou testá-la imediatamente!!

Abração
asarmento
Localização: Salvador - BA

Álvaro Sarmento
Analista de Sistemas
Unitech - Tecnologia de Informação
www.unitech.com.br



Voltar para PL/SQL

Quem está online

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