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








