Intersecção entre períodos

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
danbittencourt
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Qua, 04 Dez 2013 10:38 am

Olá,
Preciso de uma consulta que retorne a intersecção entre dois períodos. Tenho uma data inicial e uma data final em uma tabela e passa uma data inicial e uma data final como referência, preciso que a consulta retorne o número de dias que o período da tabela tem de intersecção com o período passado como referência.
Alguém tem ideia de como seria essa consulta?
Avatar do usuário
adrianoturbo
Moderador
Moderador
Mensagens: 393
Registrado em: Qui, 20 Mar 2008 4:09 pm
Localização: Brasília
Adriano Alves
---Para cada problema dificil existe uma solução simples.----

Brother,veja se isso te ajuda ,pegando a data inicial e subtraindo pela data final você terá o total de dias.
Não sei se está desenvolvendo algum relatório ,normalmente essas ferramentas de OLAP(Crystal Reports,Hyperion,Cognos entre outros) ,possuem a opção de colocar filtros para fazer isso que quer fazer ,principalmente em campos do tipo data.

Selecionar tudo

SQL> select  (to_date('04-12-2013 ', 'DD-MM-YYYY')
             - to_date('31-12-2013 ', 'DD-MM-YYYY')) total_dias
       from dual;
  
TOTAL_DIAS
----------
       -27


Avatar do usuário
adrianoturbo
Moderador
Moderador
Mensagens: 393
Registrado em: Qui, 20 Mar 2008 4:09 pm
Localização: Brasília
Adriano Alves
---Para cada problema dificil existe uma solução simples.----

Outra opção seria criar uma procedure que trouxesse os parâmetros de data inicial e final.

Selecionar tudo

CREATE OR REPLACE PROCEDURE data (
  p_data_inicial IN DATE,
  p_data_final   IN DATE
)
AS
  l_count NUMBER(1) := 0;
BEGIN
  SELECT COUNT(*)
  INTO   l_count
  FROM   tabela
  WHERE  data_inicial <= p_data_final
  AND    data_final   >= p_data_inicial
  AND    ROWNUM     = 1;
  
  IF l_count > 0 THEN
    RAISE_APPLICATION_ERROR(-60000, 'Sequencia de datas existentes.');
  END IF;
END data;
/
Responder
  • Informação
  • Quem está online

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