小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

MS-SQLサーバーで日付をWhereするには

日付データをWhereする時、普通の文字列と同じように考えてしまい、残念な思いをすることがよくあります。普通、日付データは、文字列型ではなくdatetime型です。 datetime型をWhereするときは、以下のような単一引用符 (') で囲まれた形式の文字列が、実は日付時刻データとして認識されるのです。

数値日付形式 ('1998/4/15'、'1998-4-15'など)
区切りのない文字列形式 ('19981207'、'December 12, 1998' など)
尚、日付の年月日形式(ymd)は、SQL Serverのdefault languageで決まります。 ymd (年、月、日)の順は、default languageがJapaneseの場合です。

また、datetime型データには、日付データだけでなく時刻データも入っているので、大小比較は注意が必要です。

たとえば、2006/09/13のデータが欲しいときは

Where YMD = '2006/09/13'

でなく

Where YMD >= '2006/09/13' And YMD < '2006/09/14'

となります。

YMD = '2006/09/13' だと YMD = '2006/09/13 00:00:00.000' と等価になってしまうのです。

ちなみに、文字列型ではないので、'2006/09/13' を'2006-09-13'または、'20060913'としても問題ありません。('2006/9/13' 、'2006-9-13'でもOK、しかし、'2006913'はNG)

尚、SQL Server には、datetime 型以外に smalldatetime 型 (短精度日付/時間型) があります。

また、時刻だけまたは日付だけを個別に格納するデータ型はありません。 datetime 型または smalldatetime 型の値を設定する場合、時刻だけを指定すると、日付のデフォルト "January 1, 1900" が使用されます。日付だけを指定すると、時刻のデフォルト "12:00AM (深夜)" が使用されます。