Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Czyszczenie kolumny Data Oracle

To jeden z powodów, dla których przechowywanie informacji o dacie w polu znakowym jest tak złym pomysłem.

Najłatwiejszą opcją jest utworzenie funkcji, która spróbuje przekonwertować ciąg na datę przy użyciu formatów w dowolnej kolejności priorytetów (tj. 010203 2 stycznia 2003 lub 3 lutego 2001 lub coś innego) i przechwytuje wyjątki. Coś jak

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;

co działa jak

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

Oczywiście musiałbyś zakodować pełny zestaw prawidłowych formatów dat w swoim kodzie, zajmuję się tylko dwoma pierwszymi z twojej listy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle ODP.NET wersja agnostyczna alternatywa

  2. Funkcja NVL2 w Oracle

  3. Jak najlepiej podzielić struny csv w Oracle 9i?

  4. Jak wyświetlić listę wszystkich tabel w schemacie w Oracle SQL?

  5. Dlaczego nie mogę używać zmiennych wiązania w instrukcjach DDL/SCL w dynamicznym SQL?