Oracle
 sql >> Base de données >  >> RDS >> Oracle

ORA-01847 le jour du mois doit être compris entre 1 et le dernier jour du mois - mais les données sont correctes

Ceci est votre requête avec le where clause :

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 ne garantit pas l'ordre de traitement des clauses dans le where . Donc, value <> '0' n'est pas garanti de s'exécuter avant la dernière condition. Cela se trouve être un gros problème sur SQL Server. Une solution consiste à utiliser un case déclaration :

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;

Plutôt moche, mais cela pourrait résoudre votre problème.