sql >> Databáze >  >> RDS >> Oracle

Jak identifikovat neplatné (poškozené) hodnoty uložené ve sloupcích Oracle DATE

To je docela neobvyklý scénář (i když už jsem se s něčím podobným setkal). Častějším problémem je nalezení neplatných dat, která jsou ve sloupci data držena jako řetězce. Řešení můžete přizpůsobit své situaci vytvořením vlastního validátoru data.

Něco jako toto:

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

Tím se datum převede na řetězec a zase zpět. Zachycuje výjimky vyvolané castingem data. Pokud konečný produkt není stejný jako vstupní datum, pak se pravděpodobně něco ztratilo v překladu; Abych byl upřímný, nejsem si jistý, zda by datum 12011 úspěšně vrhlo na strunu, takže toto je metoda belt'n'braces. Psaní této utility bez nějakých testovacích dat je trochu složité!

Tento dotaz by identifikoval všechna neplatná data:

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


  1. Vrácení oprávnění sloupců z propojeného serveru v SQL Server (příklady T-SQL)

  2. Jak dešifrovat heslo ze serveru SQL?

  3. Jak spouštět aplikace PHP 5 s MySQL 8.0 na CentOS 7

  4. Oznámení obecné dostupnosti SQL Safe Backup 8.7.2