日期:2014-05-19  浏览次数:20544 次

时间段
发现个问题

select   *   from   tb   where   dt   between   '2007-06-03 '   and   '2007-06-03   23:59:39 '  
这条语句会把 2007-06-04   数据查出来。
想问下,这是sqlserver规定的吗

------解决方案--------------------
为什么我的可用分不长了?呵呵。顶一个,看看长么??
------解决方案--------------------
这样是查不出来
------解决方案--------------------
select * from

(select '2007-06-03 ' as A union all select '2007-06-03 23:59:39 ' as A union all select '2007-06-04 ')

tb where A between '2007-06-03 ' and '2007-06-03 23:59:39 '

2007-06-03
2007-06-03 23:59:39

------解决方案--------------------
datetime类型的查不出来。
不知道你是怎么查出来的。。。
------解决方案--------------------
不论是日期还是字符型都不会查出来的
------解决方案--------------------
不好意思没看见是smalldatetime :(
smalldatetime 默认23:59:29 之前为当日 之后为次日 lz查的相当于select * from tb where dt between '2007-06-03 ' and '2007-06-04 00:00:00 '
------解决方案--------------------
smalldatetime精确到分钟

精度的临界值为29.999 秒
'2007-06-03 23:59:39 ' 就相当于 '2007-06-04 00:00:00 '
可以将显示转化成smalldatetime就知道结果了
SELECT CAST( '2007-06-03 23:59:39 ' AS smalldatetime)


------解决方案--------------------
我以前也出现过这样的问题,呵呵
最好就是用datetime,不用smalldatetime了,^_^