Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana mengidentifikasi nilai yang tidak valid (rusak) yang disimpan di kolom TANGGAL Oracle

Ini adalah skenario yang sangat tidak biasa (walaupun saya pernah menemukan sesuatu yang serupa sebelumnya). Masalah yang lebih umum adalah menemukan tanggal yang tidak valid yang disimpan sebagai string di kolom tanggal. Anda dapat menyesuaikan solusi untuk itu dengan situasi Anda, dengan membuat validator tanggal Anda sendiri.

Sesuatu seperti ini:

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

Ini mengubah tanggal menjadi string dan kembali lagi. Ini menangkap pengecualian yang dilemparkan oleh casting tanggal. Jika produk akhir tidak sama dengan tanggal input maka mungkin ada sesuatu yang hilang dalam terjemahan; sejujurnya saya tidak yakin apakah tanggal 12011 akan berhasil dilemparkan ke string, jadi ini adalah pendekatan belt'n'braces. Agak rumit menulis utilitas ini tanpa beberapa data uji!

Kueri ini akan mengidentifikasi semua tanggal yang tidak valid:

 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. 11 Cara Menemukan Baris Duplikat yang memiliki Kunci Utama di Oracle

  2. Bagaimana Anda bisa tahu jika suatu nilai bukan numerik di Oracle?

  3. Setel ulang jumlah kumulatif?

  4. Bagaimana saya bisa memasukkan banyak baris ke Oracle dengan nilai urutan?

  5. RR vs YY di Oracle