quinta-feira, 14 de janeiro de 2021

ORACLE - Listar meses com data inicial e final de cada mês

Segue queries para gerar lista de meses com data inicial e final de cada mês:


SELECT
TO_CHAR(TRUNC (ANOBASE, 'YEAR'), 'YYYY') ANO,
TO_CHAR(LEVEL, '00') MES,
((SELECT ADD_MONTHS (TRUNC (ANOBASE, 'YEAR'), -1) FROM DUAL) + numtoyminterval(level,'month')) as DTINI, 
LAST_DAY ((SELECT ADD_MONTHS (TRUNC (ANOBASE, 'YEAR'), -1) FROM DUAL) + numtoyminterval(level,'month')) as DTFIN 
from (SELECT TO_DATE('01/01/2022') ANOBASE from dual)
connect by level <= 12


Exemplo de saída:






Depois disso basta dar um join em outra tabela que desejar e usar as datas geradas para subconsultas.




Oracle - Listar datas do mês

 select TRUNC(SYSDATE)  + level - 1 dt from   dual connect by level <= (   LAST_DAY(SYSDATE) - TRUNC(SYSDATE) + 1 )