यह एक बहुत ही असामान्य परिदृश्य है (हालाँकि मैं पहले भी एक बार ऐसा ही कुछ देख चुका हूँ)। अधिक आम समस्या अमान्य तिथियां ढूंढ रही है जो दिनांक कॉलम में स्ट्रिंग के रूप में आयोजित की जाती हैं। आप अपना स्वयं का दिनांक सत्यापनकर्ता बनाकर, इसके लिए समाधान को अपनी स्थिति में अनुकूलित कर सकते हैं।
कुछ इस तरह:
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 की तारीख सफलतापूर्वक एक स्ट्रिंग पर डाली जाएगी, इसलिए यह एक बेल्ट'न'ब्रेसेस दृष्टिकोण है। कुछ परीक्षण डेटा के बिना इस उपयोगिता को लिखना थोड़ा मुश्किल है!
यह क्वेरी सभी गैर-वैध तिथियों की पहचान करेगी:
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';