首页 新闻 会员 周边

sql datetime的问题

0
悬赏园豆:10 [已解决问题] 解决于 2012-05-04 16:37

sql语句:

SELECT AttachDate,TaxRateKey,LevyOrgKey,MarketKey,RecordState FROM BDM_TaxTicket
WHERE AttachDate BETWEEN '2012-04-27 00:00:00.000'

AND '2012-04-27 23:59:59.999' AND RecordState ='1'
AND TaxRateKey='1' AND LevyOrgKey='1' AND MarketKey='8' --

结果:

为什么AttachDate 会出现2012-04-28 00:00:000的值 上面条件我设置的是2012-04-27 求高手指点

普通用户的主页 普通用户 | 初学一级 | 园豆:54
提问于:2012-04-28 23:00
< >
分享
最佳答案
0

' 2012-04-27 23:59:59.999'其实就是"2012-04-28 00:00:00.000" ,你用between这个条件语句,特点是包含首尾的。

如果一定要用,请使用>或<之类的。

收获园豆:5
无之无 | 大侠五级 |园豆:5095 | 2012-04-29 07:50
其他回答(7)
0

sql默认在‘2012-04-27 23:59:59.999'后面的秒是四舍五入的,所以将59.999改为29.499就可以了,总之秒四舍五入不能到30,否则就会出现楼主的问题

巴索罗缪库玛 | 园豆:48 (初学一级) | 2012-04-28 23:53
0

请检查你的字段是否是Smalldatetime
http://www.cnblogs.com/downmoon/archive/2011/08/10/2133693.html

收获园豆:5
邀月 | 园豆:25475 (高人七级) | 2012-04-29 00:23
0

这个好说,你在查之前把截取时间

SELECT AttachDate,TaxRateKey,LevyOrgKey,MarketKey,RecordState FROM BDM_TaxTicket 
WHERE AttachDate BETWEEN convert(varchar(10),时间一,120)

AND convert(varchar(10),时间二,120) AND RecordState ='1'
AND TaxRateKey='1' AND LevyOrgKey='1' AND MarketKey='8' --

再试试

iisp | 园豆:81 (初学一级) | 2012-04-29 08:31
0

建议你使用<、>、<=、>=的方式去判断时间,这样不容易出错;还有,要确保你判断的字段必须是时间格式的,如果不是,你就要将它转为时间格式后再进行判断

KivenRo | 园豆:1734 (小虾三级) | 2012-04-29 09:47
0

这个细节以前没注意到。lz可以试试条件这么写:AttachDate >='2012-04-27' and AttachDate <'2012-04-28'.

至于lz描述的,即使知道了server sql的处理机制,与我们的习惯不相符的地方,我们也改变不了,而只能避免之。

lucika.zh | 园豆:62 (初学一级) | 2012-04-29 10:37
0

时间的精度问题。SQL SERVER中时间的精度为1/300秒.

小材小用 | 园豆:639 (小虾三级) | 2012-04-29 12:13
0

我今天也碰到了这个问题以前真的没注意到,所以以后查询的时候不要用between 用><<=>=就很好,而且不要比较毫秒,当要比较时间的时候就用个时间+1天或1秒看情况了,然后用个<或>

树形图 | 园豆:4 (初学一级) | 2014-03-10 11:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册