sql >> Databasteknik >  >> RDS >> Oracle

Hur man identifierar ogiltiga (skadade) värden lagrade i Oracle DATE-kolumner

Detta är ett ganska ovanligt scenario (även om jag har stött på något liknande en gång tidigare). Det vanligaste problemet är att hitta ogiltiga datum som hålls som strängar i en datumkolumn. Du kan anpassa lösningen för det till din situation genom att bygga din egen datumvalidator.

Något så här:

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

Detta konverterar ett datum till en sträng och tillbaka igen. Den fångar undantag som skapas av datumavgjutning. Om slutprodukten inte är samma som inmatningsdatumet så har förmodligen något gått förlorat i översättningen; För att vara ärlig så är jag inte säker på om datumet 12011 skulle lyckas med en sträng, så det här är ett belt'n'braces-tillvägagångssätt. Det är lite knepigt att skriva detta verktyg utan några testdata!

Denna fråga skulle identifiera alla ogiltiga datum:

 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. .NET Core 2.1 Identity får alla användare med tillhörande roller

  2. 2019 PostgreSQL-trendrapport:Privat vs. Public Cloud, Migrations, Database Combinations &Top Reasones Used

  3. Vad är skillnaden mellan varchar och nvarchar?

  4. Håll koll på databasprestanda med Uptime Infrastructure Monitor