sql >> Databasteknik >  >> RDS >> Oracle

ORA-01847 dag i månaden måste vara mellan 1 och sista dagen i månaden - men data är OK

Det här är din fråga med where klausul:

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 garanterar inte ordningen för bearbetning av klausuler i where . Så, value <> '0' är inte garanterat att köra före det sista villkoret. Detta råkar vara ett stort problem på SQL Server. En lösning är att använda ett case uttalande:

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;

Ganska fult, men det kanske bara löser ditt problem.



  1. Hur söker man i flera kolumner med prioritet i MySQL?

  2. java.util.Timestamp.after() fel när man jämför millisekunder?

  3. Hur du anpassar dina MySQL- och MariaDB-säkerhetskopier med ClusterControl

  4. Inbyggd tabell 'performance_schema'.'???' har fel struktur