日付/時刻データ型は全て以下の手順で解読されます。
入力文字列をトークンに分割し、そしてそれぞれのトークンを文字列、時刻、時間帯、または数値というように分類します。
数値トークンにコロン(:)が含まれている場合は、時刻文字列です。 そこに続く全ての数字とコロンを含みます。
数値トークンにハイフン(-)、スラッシュ(/)、または2つ以上のドット(.)が含まれている場合は、テキストの月名がある日付文字列です。 日付トークンがすでに現れている場合は代わりに、時間帯名として解釈されます(例えばAmerica/New_York)。
トークンが数値だけの場合、それは単項、もしくはISO 8601の連結形式の日付(例:1999年1月13日を示す19990113)、あるいは時刻(例:14:15:16を示す141516)のいずれかです。
トークンがプラス記号(+)あるいはマイナス記号(-)で始まっている場合は、数値形式の時間帯フィールドか特殊なフィールドです。
もしトークンがテキスト文字列の場合、以下のように可能性のある文字列と照合されます。
時間帯短縮形としてトークンをテーブルからバイナリ検索します。
探索できなかった場合は同様にそのトークンに対し特殊文字(たとえばtoday)、日(たとえばThursday)、月(たとえばJanuary)、ノイズ(たとえばat、on)に一致するかどうか、参照テーブルにバイナリ検索をかけます。
それでも探し出せなかった場合、エラーを返します。
トークンが数値あるいは数値フィールドの場合を以下に示します。
トークンが8桁または6桁、かつ、以前に他のどのような日付フィールドも読まれていない場合は、"連結された日付"(例えば、19990118または990118)として解釈されます。 その解釈方法はYYYYMMDDまたはYYMMDDです。
もしトークンが3桁で年が既に読み込まれている場合は年内の経過日数と解釈されます。
4桁または6桁の場合で年が既に読み込まれている時は時刻(HHMMまたはHHMMSS)と解釈されます。
3桁以上の場合、かつ、どの日付フィールドもまだ見つかっていない場合は年と解釈されます (この場合、残る日付フィールドの順序は強制的にyy-mm-ddと解釈されます)。
さもなければ、日付フィールドの順序は、DateStyleの設定mm-dd-yy、dd-mm-yy、yy-mm-ddに従うものと仮定されます。 月や月内の日のフィールドが範囲外であれば、エラーになります。
もしBCが指定された場合は内部格納用に年を負の数にして1を加えます (グレゴリオ暦にはゼロ年がないので、数値的には1BC(紀元前1年)がゼロ年になります)。
BCが指定されず年フィールドの長さが2桁の場合、年は4桁になるよう調整されます。 そのフィールドが70未満の場合は2000が加えられますが、その他の場合には1900が加えられます。
ティップ: (例えば、西暦99年を0099のように)グレゴリオ暦の西暦元年から99年までは、ゼロを前に付加して4桁入力することができます。