「23:59:59.999」で

http://10395.diarynote.jp/200606080926140000/

に検索してきていた人がいたので、SQL Server 2008 で例示。

SQL:

SELECT
  CAST(’2006-6-8 23:59:59.999’ AS datetime2),
  CAST(’2006-6-8 23:59:59.999’ AS datetime),
  CAST(CAST(’2006-6-8 23:59:59.999’ AS datetime2) AS DATE),
  CAST(CAST(’2006-6-8 23:59:59.999’ AS datetime) AS DATE),
  CAST(floor(CAST(CAST(’2006-6-8 23:59:59.999’ AS datetime) AS float)) AS DATETIME)

結果:

2006-06-08 23:59:59.9990000
2006-06-09 00:00:00.000
2006-06-08
2006-06-09
2006-06-09 00:00:00.000


お楽しみください。

 あと、これは僕の私的な見解だが、
いくら between のがパフォーマンスがいいと言われていても時刻を日付で制限するときには (<= )AND (< )でやるべき。他のチューニング項目に比すれば些細なことのはず。

===
平成23年7月5日追記
datetime の説明
http://msdn.microsoft.com/ja-jp/library/ms187819.aspx
の「datetime における 1 秒未満の秒の有効桁数の丸め処理 」の項目を参照してください。

コメント