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

ORA-01847 dag i måneden skal være mellem 1 og sidste dag i måneden - men data er OK

Dette er din forespørgsel 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 garanterer ikke rækkefølgen af ​​behandling af klausuler i where . Så value <> '0' er ikke garanteret at køre før den sidste betingelse. Dette er tilfældigvis et stort problem på SQL Server. En løsning er at bruge en case erklæring:

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;

Temmelig grimt, men det kan måske løse dit problem.



  1. Ingen understøttelse af OVER i MS SQL Server 2005?

  2. Efterfølgeren har mange, tilhører eller begge?

  3. Bedste måde at læse CSV i Ruby. Hurtigere CSV?

  4. ODBC-skalarfunktioner for dato og klokkeslæt i SQL Server (T-SQL-eksempler)