ORACLEの日付チェック関数

NUMBER(8)の項目の中身が日付として正しいかわからない時に、エラーを起こさず日付型に一括変換したい。
ORACLEには日付チェック関数が存在しないので自作する必要があるらしい。

そこで
文字列が日付に変換できるかチェックする - オラクル・Oracle SQL 関数リファレンス
にあるソースをいじって簡単なファンクションを作った。

CREATE OR REPLACE FUNCTION IS_DATE(
  P_DATE      IN NUMBER
)
RETURN NUMBER
AS
  vDate          DATE;
BEGIN
  vDate := TO_DATE(P_DATE, 'YYYYMMDD');
  RETURN 1;
EXCEPTION
  WHEN OTHERS THEN
  RETURN 0;
END;

使い方はこんな感じ

  select IS_DATE(20120601),IS_DATE(20121313)
  from DUAL

もちろんWhere句でも使える