データ モデルの問題 (文字列に日付を格納する) のように聞こえます。
しかし、それが起こり、物事を制御したり変更したりできない場合があるため、私は通常、次のような関数を保持しています:
CREATE OR REPLACE FUNCTION safe_to_date (p_string IN VARCHAR2, p_format_mask IN VARCHAR2, p_error_date IN DATE DEFAULT NULL) RETURN DATE DETERMINISTIC IS x_date DATE; BEGIN BEGIN x_date := TO_DATE (p_string, p_format_mask); RETURN x_date; -- Only gets here if conversion was successful EXCEPTION WHEN OTHERS THEN RETURN p_error_date; END; END safe_to_date;
プレ>次に、次のように使用します:
WITH d AS (SELECT 'X' string_field FROM DUAL UNION ALL SELECT '11/15/2012' FROM DUAL UNION ALL SELECT '155' FROM DUAL) SELECT safe_to_date (d.string_field, 'MM/DD/YYYY') FROM d;
プレ>