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

Pembersihan kolom Tanggal Oracle

Ini adalah salah satu alasan mengapa menyimpan informasi tanggal di bidang karakter adalah ide yang buruk.

Opsi termudah adalah membuat fungsi yang mencoba mengonversi string menjadi tanggal menggunakan format dalam urutan prioritas apa pun yang Anda miliki (yaitu 010203 2 Jan 2003 atau 3 Feb 2001 atau yang lainnya) dan menangkap pengecualian. Sesuatu seperti

CREATE OR REPLACE FUNCTION my_to_date( p_str IN VARCHAR2 )
  RETURN DATE
IS
  l_date DATE;
BEGIN
  l_date := to_date( p_str, 'YYYYMMDD' );
  RETURN l_date;
EXCEPTION
  WHEN others THEN
    BEGIN
      l_date := to_date( p_str, 'MM/DD/YYYY' );
      RETURN l_date;
    EXCEPTION 
      WHEN others
      THEN
        RETURN null;
    END;
END;

yang berfungsi seperti

SQL> CREATE OR REPLACE FUNCTION my_to_date( p_str IN VARCHAR2 )
  2    RETURN DATE
  3  IS
  4    l_date DATE;
  5  BEGIN
  6    l_date := to_date( p_str, 'YYYYMMDD' );
  7    RETURN l_date;
  8  EXCEPTION
  9    WHEN others THEN
 10      BEGIN
 11        l_date := to_date( p_str, 'MM/DD/YYYY' );
 12        RETURN l_date;
 13      EXCEPTION
 14        WHEN others
 15        THEN
 16          RETURN null;
 17      END;
 18  END;
 19  /

Function created.

SQL> select my_to_date( '19000101' ) from dual;

MY_TO_DAT
---------
01-JAN-00

SQL> ed
Wrote file afiedt.buf

  1* select my_to_date( '01/02/2005' ) from dual
SQL> /

MY_TO_DAT
---------
02-JAN-05

Tentu saja, Anda harus mengkodekan set lengkap format tanggal yang valid dalam kode Anda, saya hanya menangani dua yang pertama dalam daftar Anda.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fungsi vs prosedur di Oracle

  2. java.sql.SQLException:- ORA-01000:kursor terbuka maksimum terlampaui

  3. SQL bukan fungsi grup grup tunggal

  4. Mengapa Oracle 9i memperlakukan string kosong sebagai NULL?

  5. SQL Tanda kurung kanan tidak ada pada urutan demi pernyataan