Oracle
 sql >> Baza danych >  >> RDS >> Oracle

ORA-01847 dzień miesiąca musi mieścić się w przedziale od 1 do ostatniego dnia miesiąca - ale dane są OK

To jest twoje zapytanie z where klauzula:

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 nie gwarantuje kolejności przetwarzania klauzul w where . A więc value <> '0' nie ma gwarancji, że zostanie uruchomiony przed ostatnim warunkiem. To jest duży problem na SQL Server. Jednym z rozwiązań jest użycie case oświadczenie:

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;

Raczej brzydkie, ale może to tylko rozwiązać Twój problem.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Utwórz widok przestawny w SQL z tabeli SQL

  2. Wstawianie i aktualizacja w oparciu o rekordy w Oracle

  3. OSX 10.9 Mavericks i Eclipse Kepler (4.3.2) lub M6 Eclipse Luna (4.4)

  4. Utwórz zadanie harmonogramu Oracle

  5. Jak połączyć się z Oracle DB z .NET?