" somedate <= 2009-1-1 23:59.59.999 " 陷阱

看到标题,相信很多有经验的开发人员,已经猜到是什么问题了。

写在这里是希望给后来人一个提醒,并且也提醒自己应该如何正确的去认识任何一个数据类型。

言归正传,用 " 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  这样能够正确的表达这句过滤条件的真正目的吧。

 

posted @ 2009-01-06 14:50  Cheese  阅读(615)  评论(0编辑  收藏  举报