sql >> Database teknologi >  >> RDS >> Oracle

Sådan identificeres ugyldige (beskadigede) værdier gemt i Oracle DATE-kolonner

Dette er et ret usædvanligt scenarie (selvom jeg er stødt på noget lignende en gang før). Det mere almindelige problem er at finde ugyldige datoer, der holdes som strenge i en datokolonne. Du kan tilpasse løsningen til det til din situation ved at bygge din egen datevalidator.

Noget som dette:

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

Dette konverterer en dato til en streng og tilbage igen. Den fanger undtagelser fra datocasting. Hvis slutproduktet ikke er det samme som inputdatoen, så er der formodentlig gået noget tabt i oversættelsen; for at være ærlig er jeg ikke sikker på, om 12011-datoen ville blive støbt til en streng, så dette er en belt'n'braces-tilgang. Det er lidt vanskeligt at skrive dette værktøj uden nogle testdata!

Denne forespørgsel identificerer alle de ugyldige datoer:

 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. Hvorfor overhovedet bruge *DB.exec() eller forberedte sætninger i Golang?

  2. Oracle 11g Express Edition til Windows 64bit?

  3. Eksempler på formatering af 'datetime offset' i SQL Server ved hjælp af Standard Format Strings (T-SQL)

  4. FEJL 1045 (28000):Adgang nægtet for brugeren 'root'@'localhost' (ved hjælp af adgangskode:JA)