Oracle
 sql >> Datenbank >  >> RDS >> Oracle

ORA-01847 Tag des Monats muss zwischen dem 1. und dem letzten Tag des Monats liegen - aber die Daten sind in Ordnung

Dies ist Ihre Abfrage mit dem where Klausel:

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;

Oracle garantiert nicht die Reihenfolge der Verarbeitung von Klauseln im where . Also value <> '0' wird nicht garantiert vor der letzten Bedingung ausgeführt. Dies ist ein großes Problem auf SQL Server. Eine Lösung ist die Verwendung eines case Aussage:

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;

Ziemlich hässlich, aber es könnte Ihr Problem lösen.