Problema com connect by level com data

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
xprata
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 93
Registrado em: Ter, 06 Abr 2010 11:31 am
Localização: São Paulo - SP

Boas senhores,
Tenho que pegar os dias de um período.
usando o connect by level consegui resolver o problema, mas......
Quando tenho um único registro/período funciona mas para mais de um, começa a duplicar.

No exemplo que irei mostrar o primeiro período duplica o último dia e o segundo triplica todos os dias
Alguém teria uma luz?

Vou exemplificar usando dados fixo com dual...como segue:

Selecionar tudo

select id,di,df,di-1+level dtDia
from
(
--Gerar linha 1 
select 1 id, to_date('20/09/2018 13:40:00','dd/mm/yyyy hh24:mi:ss') di
,to_date('21/09/2018 19:25:00','dd/mm/yyyy hh24:mi:ss') df from dual
union all
--Gerar linha 2
select 2 id, to_date('21/09/2018 17:00:00','dd/mm/yyyy hh24:mi:ss') di
,to_date('10/10/2018 10:15:00','dd/mm/yyyy hh24:mi:ss') df from dual
)
CONNECT BY LEVEL <= ((trunc(df) - trunc(di)))+1
order by id,dtDia

Obrigado e t+
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Tenta assim:

Selecionar tudo

SELECT DISTINCT x.dia dias
  FROM (SELECT data_inicial + LEVEL - 1 dia
          FROM (SELECT to_date(&p_ini, 'dd/mm/rrrr') data_inicial FROM dual)
        CONNECT BY LEVEL <= to_date(&p_fim, 'dd/mm/rrrr') - to_date(&p_ini, 'dd/mm/rrrr') + 1) x
--      , table_a a
--where x.dia BETWEEN a.data_inicial AND a.data_final
ORDER BY x.dia;
Responder
  • Informação