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?
Intersecção entre períodos
-
- Rank: Estagiário Júnior
- Mensagens: 1
- Registrado em: Qua, 04 Dez 2013 10:38 am
- adrianoturbo
- 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.----
---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.
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.
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
- adrianoturbo
- 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.----
---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.
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;
/
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 19 visitantes