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で日付文字列の日付チェックを行う」の紹介でした。