lemanoel 0 Denunciar post Postado Julho 24, 2021 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
Motta 645 Denunciar post Postado Julho 24, 2021 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
lemanoel 0 Denunciar post Postado Julho 24, 2021 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
Motta 645 Denunciar post Postado Julho 24, 2021 Não vi porque o between não funcionaria. Compartilhar este post Link para o post Compartilhar em outros sites
lemanoel 0 Denunciar post Postado Julho 26, 2021 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
Motta 645 Denunciar post Postado Julho 26, 2021 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