sql >> Database >  >> RDS >> Oracle

Oracle Datum kolom opschonen

Dit is een van de redenen waarom het zo'n slecht idee is om datumgegevens in een tekenveld op te slaan.

De gemakkelijkste optie is om een ​​functie te maken die probeert de string naar een datum te converteren met behulp van de formaten in welke prioriteitsvolgorde je ook hebt (d.w.z. 010203 2 januari 2003 of 3 februari 2001 of iets anders) en de uitzonderingen opvangt. Iets als

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;

wat ongeveer werkt als

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

Natuurlijk moet je de volledige set geldige datumnotaties in je code coderen, ik behandel alleen de eerste twee in je lijst.



  1. Fout:Geen module met de naam psycopg2.extensions

  2. Hoe kan ik het tellen van rijen in een PostgreSQL-tabel versnellen?

  3. Een tabel maken in SQL - Voorbeeldquery van Postgres en MySQL

  4. Null-waarden sorteren na alle andere, behalve speciaal