Ini adalah skenario yang sangat tidak biasa (walaupun saya pernah menemukan sesuatu yang serupa sebelumnya). Masalah yang lebih umum adalah menemukan tanggal yang tidak valid yang disimpan sebagai string di kolom tanggal. Anda dapat menyesuaikan solusi untuk itu dengan situasi Anda, dengan membuat validator tanggal Anda sendiri.
Sesuatu seperti ini:
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;
/
Ini mengubah tanggal menjadi string dan kembali lagi. Ini menangkap pengecualian yang dilemparkan oleh casting tanggal. Jika produk akhir tidak sama dengan tanggal input maka mungkin ada sesuatu yang hilang dalam terjemahan; sejujurnya saya tidak yakin apakah tanggal 12011 akan berhasil dilemparkan ke string, jadi ini adalah pendekatan belt'n'braces. Agak rumit menulis utilitas ini tanpa beberapa data uji!
Kueri ini akan mengidentifikasi semua tanggal yang tidak valid:
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';