Top > SQL 関数一覧 (T‐Z) > 文字列が日付に変換できるかチェックする

日付の文字列が正しい日付かチェックする

IS_DATE ファンクション (日付文字列の有効性チェック)

文字列型の日付の整合性をチェックする関数は組み込み関数およびパッケージに用意されていない。 不正な日付文字をチェックなしに TO_DATE 関数 を使用すると例外が発生する。 これは外部入力データの投入バッチ処理などにおいて、トランザクション がロールバックすることにつながる。

CSV や文字列、テキストベースで用意されたデータをデータベースに投入する際の日付のチェック処理は欠かせない。

  • IS_DATE ファンクションのソース

日付文字列の形式はグレゴリオ暦のみ有効

CREATE OR REPLACE FUNCTION RIVUS.IS_DATE(
  P_DATE      IN VARCHAR,
  P_FORMAT    IN VARCHAR := 'RR/MM/DD HH24:MI:SS' ,
  P_EXTRACT   IN BOOLEAN := FALSE
)
RETURN NUMBER
AS
--  vDateFormat    VARCHAR2(40) NOT NULL :=  P_FORMAT;
--                     上の記述では NULL の入力を例外処理できない。
  vDateFormat    VARCHAR2(40) NOT NULL := 'RR/MM/DD HH24:MI:SS';
  vDate          DATE;
BEGIN
  vDateFormat := P_FORMAT;
  IF (P_EXTRACT) THEN
    vDateFormat := 'FX' || vDateFormat;
  END IF;
  vDate := TO_DATE(P_DATE, vDateFormat, q'{NLS_CALENDAR = 'GREGORIAN'}' );
--  vDate := TO_DATE(P_DATE, vDateFormat, 'NLS_CALENDAR = ''GREGORIAN''' );
  RETURN 1;
EXCEPTION
  WHEN OTHERS THEN
    RETURN 0;
END;
/

IS_DATE 使用例

SELECT
    DECODE(IS_DATE(DATE_STR), 1, TO_DATE(DATE_STR), TO_DATE('9999/12/31'))
FROM DATE_STRING ;

q'{NLS_CALENDAR = 'GREGORIAN'}' は代替引用符を使った記述方法



関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ 会員制(無料)の公式技術サイト