To je docela neobvyklý scénář (i když už jsem se s něčím podobným setkal). Častějším problémem je nalezení neplatných dat, která jsou ve sloupci data držena jako řetězce. Řešení můžete přizpůsobit své situaci vytvořením vlastního validátoru data.
Něco jako toto:
create or replace function is_a_date
( p_date in date )
return varchar2
is
d date;
begin
d := to_date(to_char(p_date, 'SYYYYMMDDHH24MISS'), 'SYYYYMMDDHH24MISS') ;
if d != p_date then
return 'not a proper date';
else
return 'good date';
end if;
exception
when others then
return 'not a date';
end;
/
Tím se datum převede na řetězec a zase zpět. Zachycuje výjimky vyvolané castingem data. Pokud konečný produkt není stejný jako vstupní datum, pak se pravděpodobně něco ztratilo v překladu; Abych byl upřímný, nejsem si jistý, zda by datum 12011 úspěšně vrhlo na strunu, takže toto je metoda belt'n'braces. Psaní této utility bez nějakých testovacích dat je trochu složité!
Tento dotaz by identifikoval všechna neplatná data:
select h.id, dump(h.bid_close_date)
from mytable h
where h.bid_close_date is not null
and is_a_date(h.bid_close_date) != 'good date';