Jump to content
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?

 

 

Share this post


Link to post
Share on other 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ó... 

Share this post


Link to post
Share on other sites

Não vi porque o between não funcionaria.

Share this post


Link to post
Share on other 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)

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.