Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

ORA-01847 dia do mês deve estar entre 1 e último dia do mês - mas os dados estão OK


Esta é a sua consulta com o where cláusula:
select value1, to_date(value1,'DD.MM.YYYY') 
from variableindex 
where value1 is not null and
      value1 <> '0' and
      creation_time_ > to_timestamp('20140307', 'YYYYMMDD') and
      to_date(value1 'DD.MM.YYYY') < to_date('20140301', 'YYYYMMDD')
order by 2;

A Oracle não garante a ordem de processamento das cláusulas no where . Então, value <> '0' não é garantido que funcione antes da última condição. Isso é um grande problema no SQL Server. Uma solução é usar um case declaração:
select value1,to_date(value1, 'DD.MM.YYYY') 
from variableindex 
where value1 is not null and
      value1 <> '0' and
      creation_time_ > to_timestamp('20140307', 'YYYYMMDD') and
      (case when value <> '0' then to_date(value1, 'DD.MM.YYYY') end) <
          to_date('20140301', 'YYYYMMDD')
order by 2;

Muito feio, mas pode resolver seu problema.