sql >> Database >  >> RDS >> Oracle

ORA-01847 dag van de maand moet tussen de 1 en de laatste dag van de maand liggen - maar de gegevens zijn OK

Dit is uw vraag met de where clausule:

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 garandeert niet de volgorde van verwerking van clausules in de where . Dus value <> '0' wordt niet gegarandeerd uitgevoerd vóór de laatste voorwaarde. Dit is een groot probleem op SQL Server. Een oplossing is het gebruik van een case verklaring:

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;

Nogal lelijk, maar het zou je probleem kunnen oplossen.



  1. Tel rijen in mysql-database waar tijdstempel binnen X-interval

  2. Cassandra v3 installeren op CentOS 6

  3. Verbinding maken met AWS RDS via PDO

  4. Waarom worden transacties niet teruggedraaid bij gebruik van SpringJUnit4ClassRunner/MySQL/Spring/Hibernate