DateFormatをmdyに設定すると、この形式のすべての日付に対してtrueが検証されます。
mdyに従って無効な日付形式が見つかった場合は、言語に従って設定を確認します。言語でサポートされている有効な日付が見つかった場合はtrueを返し、そうでない場合はfalseを返します。
ユーザーAのデフォルト言語がus_englishの場合、2006年4月6日の日付は2006年4月6日と解釈されます。ユーザーBのデフォルト言語が「British」の場合、日付は6月4日と解釈されます。 2006年。
/* Use these sessions settings. */
SET LANGUAGE us_english;
SET DATEFORMAT mdy;
/* Expression in mdy dateformat */
SELECT ISDATE('04/15/2008'); --Returns 1.
/* Expression in mdy dateformat */
SELECT ISDATE('04-15-2008'); --Returns 1.
/* Expression in mdy dateformat */
SELECT ISDATE('04.15.2008'); --Returns 1.
/* Expression in myd dateformat */
SELECT ISDATE('04/2008/15'); --Returns 1.
SET DATEFORMAT mdy;
SELECT ISDATE('15/04/2008'); --Returns 0.
SET DATEFORMAT mdy;
SELECT ISDATE('15/2008/04'); --Returns 0.
SET DATEFORMAT mdy;
SELECT ISDATE('2008/15/04'); --Returns 0.
SET DATEFORMAT mdy;
SELECT ISDATE('2008/04/15'); --Returns 1.
SET DATEFORMAT dmy;
SELECT ISDATE('15/04/2008'); --Returns 1.
SET DATEFORMAT dym;
SELECT ISDATE('15/2008/04'); --Returns 1.
SET DATEFORMAT ydm;
SELECT ISDATE('2008/15/04'); --Returns 1.
SET DATEFORMAT ymd;
SELECT ISDATE('2008/04/15'); --Returns 1.
SET LANGUAGE English;
SELECT ISDATE('15/04/2008'); --Returns 0.
SET LANGUAGE Hungarian;
SELECT ISDATE('15/2008/04'); --Returns 0.
SET LANGUAGE Swedish;
SELECT ISDATE('2008/15/04'); --Returns 0.
SET LANGUAGE Italian;
SELECT ISDATE('2008/04/15'); --Returns 1.
/* Return to these sessions settings. */
SET LANGUAGE us_english;
SET DATEFORMAT mdy;
数値形式では、区切り文字としてダッシュ(-)、ドット(。)、またはスラッシュ(/)を使用できます。SQL Serverが文字列を解析する方法の規則は、区切り文字によって変わりません。よくある誤解は、ANSI SQL形式(「ISO形式」と少し誤って呼ばれることもあります)、1998-02-23は、smalldatetimeおよびdatetimeに対して言語に依存しないというものです。そうではありません。これは数値形式であるため、SETDATEFORMATおよびSETLANGUAGE設定に依存します。
SET LANGUAGE us_english
SELECT CAST('2003-02-28' AS datetime)
-----------------------
2003-02-28 00:00:00.000
SET LANGUAGE british
SELECT CAST('2003-02-28' AS datetime)
Server: Msg 242, Level 16, State 3, Line 4
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
エラーメッセージをよくお読みください。それは問題が何であるかを正確に言います。日時の値を文字列として指定しますが、使用している形式とDATEFORMAT設定に従って文字列が形成されていないため、SQLServerは文字列を日時の値に変換できません。