Query para obter a quantidade de dias dentro de um período

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,

Preciso pegar informações entre datas onde esta data pode estar entre 2 meses.
Como faço para pegar a quantidade de dias de cada mês dentro deste período?
Exemplo: Data inicial = 24/08/2018 e Data final= 10/09/2018
Tenho 17 dias no mês 08 e 10 dias no mês 09..
Como trazer isso via query?
Obrigado e t+
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

hmmm..
Acho que entendi sua dúvida:

Você quer uma resposta assim:
MARÇO/2018 - 20 DIAS
ABRIL/2018 - 15 DIAS
.
.
.

é isso ?
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

Correto
Obrigado pelo retorno
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

Sabe como fazer?
ballboas
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 98
Registrado em: Qui, 02 Ago 2007 3:06 pm
Localização: sp
Érico Balboa

A pergunta mais cretina é aquela que não é feita

Selecionar tudo

(last_day(dt_inicio) - dt_inicio) QTD_DIAS_INICIO
(dt_fim - trunc(dt_fim,'mm')) QTD_DIAS_FIM
Isso?? :?
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Olá,

acredito que da seguinte forma deve atender tua necessidade:

Selecionar tudo

WITH meses AS (
SELECT ADD_MONTHS(data_inicial, LEVEL - 1)  dia
     , TRUNC(to_date(&p_ini, 'dd/mm/rrrr')) INI
     , TRUNC(to_date(&p_fim, 'dd/mm/rrrr')) FIM
  FROM (SELECT trunc(to_date(&p_ini, 'dd/mm/rrrr')) data_inicial FROM dual)
CONNECT BY LEVEL <= MONTHS_BETWEEN(TRUNC(to_date(&p_fim, 'dd/mm/rrrr'),'MM'),TRUNC(to_date(&p_ini, 'dd/mm/rrrr'),'MM')) + 1
)

SELECT m.dia
     , m.ini
     , m.fim
     , LEAST (m.fim, LAST_DAY(m.dia) )   MENOR-- MENOR OU DATA final, ou ultima dia do mês
     , GREATEST(m.ini,TRUNC(m.dia,'MM')) MAIOR -- MAIOR OU DATA inicial, ou primeiro do mês     
     , TRUNC(m.dia,'MM') PERIODO
     , LEAST (m.fim, LAST_DAY(m.dia) ) - GREATEST(m.ini,TRUNC(m.dia,'MM')) + 1 DIAS_PERIODO
  FROM meses m
Responder
  • Informação
  • Quem está online

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