Това е доста необичаен сценарий (въпреки че веднъж съм срещал нещо подобно). По-често срещаният проблем е намирането на невалидни дати, които се държат като низове в колона за дата. Можете да адаптирате решението за това към вашата ситуация, като създадете свой собствен валидатор за дата.
Нещо като това:
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;
/
Това преобразува дата в низ и обратно. Той улавя изключения, хвърлени от прехвърляне на дата. Ако крайният продукт не е същият като датата на въвеждане, тогава вероятно нещо се е загубило в превода; честно казано, не съм сигурен дали датата 12011 ще бъде прехвърлена успешно към низ, така че това е подход belt'n'braces. Малко е трудно да напишете тази помощна програма без някои тестови данни!
Тази заявка ще идентифицира всички невалидни дати:
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';