Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So identifizieren Sie ungültige (beschädigte) Werte, die in Oracle DATE-Spalten gespeichert sind

Dies ist ein ziemlich ungewöhnliches Szenario (obwohl ich schon einmal auf etwas Ähnliches gestoßen bin). Das häufigere Problem besteht darin, ungültige Datumsangaben zu finden, die als Zeichenfolgen in einer Datumsspalte enthalten sind. Sie könnten die Lösung dafür an Ihre Situation anpassen, indem Sie Ihren eigenen Datumsprüfer bauen.

Etwa so:

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;
/ 

Dies wandelt ein Datum in einen String um und wieder zurück. Es fängt Ausnahmen ab, die von der Datumsumwandlung ausgelöst werden. Wenn das Endprodukt nicht mit dem Eingabedatum übereinstimmt, ist vermutlich etwas bei der Übersetzung verloren gegangen; Um ehrlich zu sein, bin ich mir nicht sicher, ob das 12011-Datum erfolgreich auf eine Schnur gegossen werden würde, also ist dies ein Belt'n'Braces-Ansatz. Es ist etwas schwierig, dieses Dienstprogramm ohne einige Testdaten zu schreiben!

Diese Abfrage würde alle ungültigen Daten identifizieren:

 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';