Ir para conteúdo

POWERED BY:

lemanoel

Union com data que nao existe

Recommended Posts

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?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
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

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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ó... 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.