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

Oracle:to_dateでNULL値を回避する

    start_dateの場合 NULLの場合、例外はスローされません。

    select to_date( null, 'mm/dd/yyyy' ) 
      from dual
    

    NULLを返す完全に有効なSQLステートメントです。

    発生しているエラーは、start_dateの行の少なくとも一部が 列は、実際には期待する形式の文字列ではなく、無効な日付にマップされます(つまり、文字列「13/35/2007」)。文字列を日付に変換して、変換された日付またはNULLを返すことができるかどうかをテストする関数を作成できます。その後、to_dateの代わりにそれを使用できます 。

    CREATE OR REPLACE FUNCTION my_to_date( p_str    IN VARCHAR2,
                                           p_format IN VARCHAR2 )
      RETURN DATE
    IS
    BEGIN
      RETURN to_date( p_str, p_format );
    EXCEPTION
      WHEN OTHERS
      THEN
        RETURN NULL;
    END;
    

    次に、my_to_dateを使用します to_dateの代わりに 。それはあなたが得ているエラーを排除するはずです。ただし、無効な文字列を取り除くために、データをクリーンアップすることをお勧めします。



    1. MySQLでサーバーによってサポートされている照合を見つける方法

    2. PostgreSQL:読み取り専用テーブル

    3. クエリが返す行が少なすぎます

    4. PL/pgSQLで行型変数を宣言します