Oracle
 sql >> Database >  >> RDS >> Oracle

ORA-01847 il giorno del mese deve essere compreso tra 1 e l'ultimo giorno del mese, ma i dati sono OK

Questa è la tua domanda con where clausola:

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 non garantisce l'ordine di elaborazione delle clausole nel where . Quindi, value <> '0' non è garantito che venga eseguito prima dell'ultima condizione. Questo sembra essere un grosso problema su SQL Server. Una soluzione è usare un case dichiarazione:

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;

Piuttosto brutto, ma potrebbe risolvere il tuo problema.