Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola, tenho a seguinte situação:
select * from tabela_xyz where data = to_date('**01/01**/2021','dd/mm/yyyy')
Union all
select * from tabela_xyz where data = to_date('**15/01**/2021','dd/mm/yyyy')
Union all
select * from tabela_xyz where data = to_date('**31/01**/2021','dd/mm/yyyy')
Preciso unir todos os dias do mes.... Quando executo em um mes de 31 Dias (exemplo janeiro) a query executa perfeitamente.... Mas quando executo em um mes de 28 dias (exemplo fevereiro) da erro, pois as datas 29,30, e 31 nao existem
Quero excetuar os últimos unions quando a data nao existir .... Se a data existir, traz o resultado, se nao ignora
alguém ja passou por isso? pode me ajudar?Ola @Motta neste caso o between nao daria certo pq os dados da tabela sao temporais... É como se eu precisasse de uma foto dia a dia.... E depois juntar tudo em uma tabela só...
Não vi porque o between não funcionaria.
Esse é so um exemplo de código... O que estou escrevendo de verdade tem muitos joins e muitas condicionais e uma alteracao no dia 10 por exemplo poderia refletir no resultado dia 05... O que preciso saber é o que tem lançado dia a dia... Com o between ele traria um falso positivo.... Ai a saida que achei foi executar a query dia a dia usando o union all.... Mas ai cai no problema das datas que nao existem....
Queria fazer assim... Se a clausula é valida, executa se nao traz resultado em branco (ou nao executa)
Ok a Function
LAST_DAY
retorna o último dia do mês
em tese este sql resolve a montagem
SELECT 'SELECT * FROM tabela_xyz WHERE DATA = ' ||
TO_CHAR(DIA,'dd/mm/yyyy') || ';' LINHAS
FROM
(
SELECT TO_DATE('01/02/2021','DD/MM/YYYY')+LEVEL-1 DIA
FROM DUAL
CONNECT BY LEVEL <
(LAST_DAY(TO_DATE('01/02/2021','DD/MM/YYYY')) -
TO_DATE('01/02/2021','DD/MM/YYYY'))+2
)
mas creio não ter entendido o problema.
select *
from tabela_xyz
where data between to_date('01/01/2021','dd/mm/yyyy') and
last_day(to_date('01/01/2021','dd/mm/yyyy'))
Use o between , não o union ...
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions072.htm
https://www.techonthenet.com/oracle/between.php