Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да идентифицираме невалидни (повредени) стойности, съхранени в колони DATE на Oracle

Това е доста необичаен сценарий (въпреки че веднъж съм срещал нещо подобно). По-често срещаният проблем е намирането на невалидни дати, които се държат като низове в колона за дата. Можете да адаптирате решението за това към вашата ситуация, като създадете свой собствен валидатор за дата.

Нещо като това:

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 ще бъде прехвърлена успешно към низ, така че това е подход belt'n'braces. Малко е трудно да напишете тази помощна програма без някои тестови данни!

Тази заявка ще идентифицира всички невалидни дати:

 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво всъщност използва LISTAGG с ORDER BY NULL като критерии за поръчка?

  2. Получете набори от корекции за база данни

  3. PostgreSQL mysql оракул разлики

  4. java.lang.UnsatisfiedLinkError:няма ocijdbc11 в java. библиотека.път

  5. Каква е разликата между неповтарящо се четене и фантомно четене?