SQLServerで日付文字列の日付チェックを行う

データベースSQLServer

記事内に広告が含まれています。

SQLServerで日付文字列の日付チェックを行う方法を紹介します。

コーディング例

BEGIN

    -- テンポラリテーブル作成
    CREATE TABLE #TMP(
        DateStr        CHAR(8)
    )

    -- 初期データ追加
    INSERT INTO #TMP
    VALUES
         ('20200131')
        ,('20200132')
    ;

    -- 日付チェック
    SELECT
         DateStr                    AS [日付文字列]
        ,CASE
            WHEN ISDATE(DateStr) = 0 THEN 'ERROR'
            ELSE 'OK'
         END                        AS [ISDATEチェック]
        ,ISDATE(DateStr)            AS [ISDATE結果]
        ,CASE
            WHEN TRY_CONVERT(DATE, DateStr) IS NULL THEN 'ERROR'
            ELSE 'OK'
         END                        AS [TRY_CONVERTチェック]
        ,TRY_CONVERT(DATE, DateStr) AS [TRY_CONVERT結果]
    FROM
        #TMP
    ;

    -- テンポラリテーブル削除
    DROP TABLE #TMP;

END

実行結果

日付文字列 ISDATEチェック ISDATE結果 TRY_CONVERTチェック TRY_CONVERT結果
20200131 OK 1 OK 2020-01-31
20200132 ERROR 0 ERROR NULL

18~21行目はISDATE関数を使用して日付文字列の妥当性をチェックしています。ISDATE関数は日付文字列が妥当でなければ0を返します。
23~26行目はTRY_CONVERT関数を使用して日付文字列の妥当性をチェックしています。CONVERT関数を使用した場合、データに不正な日付文字列があると「文字列から日付と時刻、またはそのいずれかへの変換中に、変換が失敗しました。」というクエリエラーが発生し、SQLが中断してしまいますが、TRY_CONVERT関数を使用するとクエリエラーは発生せず、不正な日付文字列を考慮した処理を行うことができます。
ISDATE関数は日付文字列の妥当性チェックのみですが、TRY_CONVERT関数は日付文字列が妥当であれば、変換した日付型の値で後続の計算が行うことができます。
以上、「SQLServerで日付文字列の日付チェックを行う」の紹介でした。

システムトラストでは一緒に働いていただける仲間を募集中です。
株式会社システムトラスト

システムトラストでは、システムエンジニア、プログラマーなどを随時募集中です。気軽にご相談ください。

お問合せ