sql >> Databáze >  >> RDS >> Oracle

Čištění sloupce Oracle Date

To je jeden z důvodů, proč je ukládání informací o datu do znakového pole tak špatný nápad.

Nejjednodušší možností je vytvořit funkci, která se pokusí převést řetězec na datum pomocí formátů v libovolném pořadí priority, které máte (tj. je 010203 2. ledna 2003 nebo 3. února 2001 nebo něco jiného) a zachytí výjimky. Něco jako

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ž funguje něco jako

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

Samozřejmě byste ve svém kódu museli zakódovat celou sadu platných formátů data, já se zabývám pouze prvními dvěma ve vašem seznamu.



  1. Připojení k serveru SQL někdy funguje

  2. Podivná chybová zpráva SQLAlchemy:TypeError:objekt 'dict' nepodporuje indexování

  3. Řízení výkonu pro PostgreSQL s HAProxy

  4. ExecuteScalar vs ExecuteNonQuery při vrácení hodnoty identity