To dość nietypowy scenariusz (choć z czymś podobnym spotkałem się już kiedyś). Najczęstszym problemem jest znajdowanie nieprawidłowych dat, które są przechowywane jako ciągi w kolumnie daty. Możesz dostosować rozwiązanie do swojej sytuacji, budując własny walidator dat.
Coś takiego:
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;
/
To konwertuje datę na ciąg i z powrotem. Przechwytuje wyjątki zgłoszone przez rzutowanie dat. Jeśli produkt końcowy nie jest taki sam jak data wejściowa, to prawdopodobnie coś zgubiło się w tłumaczeniu; szczerze mówiąc nie jestem pewien, czy data 12011 z powodzeniem rzuci się na sznurek, więc jest to podejście belt'n'braces. Pisanie tego narzędzia bez danych testowych jest trochę trudne!
To zapytanie zidentyfikuje wszystkie niepoprawne daty:
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';