SQL Server で日付文字列が MM/DD/YYYY 形式であるかどうかを確認するにはどうすればよいですか?
4 に答える
SET DATEFORMAT MDY;
SELECT CASE WHEN ISDATE(@string) = 1
AND @string LIKE '[0-1][0-9]/[0-3][0-9]/[1-2][0-9][0-9][0-9]'
THEN 1 ELSE 0 END;
結果が 1 の場合、それは有効な日付ですが、ユーザーが意図した日付であるという保証はありません。彼らが入力した場合:
06/07/2012
6 月 7 日なのか 7 月 6 日なのかを知る方法はありません。最善の策は、ユーザーにドロップダウンまたはカレンダー コントロールから日付を選択させることです。これにより、形式を制御し、不要な解釈を避けることができます。アプリケーション層は、厳密に型指定された変数/パラメーターを使用して、適切に型指定された列に挿入できます。
MDY かどうかを確認するために SQL Server の dateformat を使用している場合は、次を使用します。
dbcc useroptions
そしてdateformat Set Optionを見てください
CONVERT関数を使用して、日付をこの形式MM/DD/YYYYの日付文字列に変換します
select convert(varchar(10),getdate(),101)
出力は 2012 年 9 月 8 日現在のものになります。
09/08/2012
日付フィールドがnullかどうかを確認する以外は、検証する必要はありません
データベースの外でそれを行う必要があります。データベースは、datetime を独自の形式で内部的に格納します。日付が保存されている形式を読み取ることができるとは思いません。たとえば、dd/mm/yyyy や yyyy/mm/dd など、好きな方法で読み取ることができます。
できることは、任意の日付フィールドについて、データベースの外部でこの値を確認することです。そのために正規表現を使用できます。しかし、それはデータベースの外になります。