sql >> データベース >  >> RDS >> Oracle

OracleDate列のクリーニング

    これが、文字フィールドに日付情報を格納することが非常に悪い考えである理由の1つです。

    最も簡単なオプションは、任意の優先順位(つまり、010203 2003年1月2日または2001年2月3日など)の形式を使用して文字列を日付に変換し、例外をキャッチする関数を作成することです。のようなもの

    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;
    

    のように機能します
    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
    

    もちろん、コードには有効な日付形式の完全なセットをコーディングする必要があります。私はリストの最初の2つだけを処理しています。



    1. ダウンタイムなしでPostgreSQL10をPostgreSQL11にアップグレードする方法

    2. 複数の列のチェック制約

    3. 大規模アプリケーション向けのデータパーティショニング

    4. PostgreSQLで月ごとにグループ化する方法