trapemiyaの日記

hatenablogが新しくなったんで新規一転また2019年1月からちょこちょこ書いてます。C#中心のプログラミングに関するお話です。

 何日以下のデータを抽出する時の注意!

日付時刻データの使用
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/acdata/ac_8_con_03_765d.asp

に書いてあるのだが、時刻を省略して日付のみを指定すると、時刻のデフォルトの"12:00AM(深夜)"が使用される。
これを知っていないと、例えば、以下のようなデータがあった場合、7月30日より小さいデータを抜こうと思った場合、思わぬ落とし穴にはまる恐れがある。

   upddate
----------------
2005/07/29 11:33
2005/07/30 14:58

データが2件あり、7月30日以前のデータを抜こうと思い、where句に、
where upddate <= '2005/07/30'
と書いたが、実際に抜かれるのは'2005/07/29 11:33'のレコードだけである。
なぜなら、where upddate <= '2005/07/30'は、実際には、
where upddate <= '2005/07/30 00:00'
と指定したのと同じことだからである。

この場合、きちんと7月30日以前のデータを抜きたければ、
where upddate < '2005/08/01'
となる。
もしくは、

datetime 型と smalldatetime 型
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/tsqlref/ts_da-db_9xut.asp

に書いてあるように、
where upddate <= '2005/07/30 23:59:59.999'
としなければならない。

ご注意あれ。