sql >> Databáze >  >> RDS >> Oracle

ORA-01847 den v měsíci musí být mezi 1 a posledním dnem v měsíci - ale data jsou v pořádku

Toto je váš dotaz s where klauzule:

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 nezaručuje pořadí zpracování klauzulí v where . Takže value <> '0' není zaručeno, že běží před poslední podmínkou. To se stává velkým problémem na serveru SQL. Jedním z řešení je použít case prohlášení:

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;

Spíše ošklivé, ale mohlo by to vyřešit váš problém.



  1. Získejte počet konkrétní kategorie a dále rozvětvené podkategorie pomocí SQL dotazu

  2. Zkombinujte výsledky dvou nesouvisejících dotazů do jednoho zobrazení

  3. Silné referenční kurzory s datovým typem záznamu založeného na tabulce

  4. Přírůstek identity skáče v databázi SQL Server