看到标题,相信很多有经验的开发人员,已经猜到是什么问题了。
写在这里是希望给后来人一个提醒,并且也提醒自己应该如何正确的去认识任何一个数据类型。
言归正传,用 " somedate <= 2009-1-1 23:59.59.999 " 作为查询条件,最终的结果是
会把 somedate = 2009-1-2 00:00.00.000 的记录一起查出来。
为什么呢?答案在联机丛书中一句不起眼的话:
“日期和时间数据,从 1753 年 1 月 1 日到 9999 年 12 月 31 日,准确度为三百分之一秒或 3.33 毫秒。值被圆整到 .000、.003 或 .007 毫秒增量。”
也就是说,我们使用datetime时,可以用到1毫秒级别,但是Sql Server看到的只精确到3.33毫秒。
深层的原因有待研究,也许哪位大虾可帮忙解释一下。
本人推荐的用法是 : somedate < 2009-1-2 00:00.00.000 这样能够正确的表达这句过滤条件的真正目的吧。