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 求高手指点
' 2012-04-27 23:59:59.999'其实就是"2012-04-28 00:00:00.000" ,你用between这个条件语句,特点是包含首尾的。
如果一定要用,请使用>或<之类的。
sql默认在‘2012-04-27 23:59:59.999'后面的秒是四舍五入的,所以将59.999改为29.499就可以了,总之秒四舍五入不能到30,否则就会出现楼主的问题
这个好说,你在查之前把截取时间
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' --
再试试
建议你使用<、>、<=、>=的方式去判断时间,这样不容易出错;还有,要确保你判断的字段必须是时间格式的,如果不是,你就要将它转为时间格式后再进行判断
这个细节以前没注意到。lz可以试试条件这么写:AttachDate >='2012-04-27' and AttachDate <'2012-04-28'.
至于lz描述的,即使知道了server sql的处理机制,与我们的习惯不相符的地方,我们也改变不了,而只能避免之。
时间的精度问题。SQL SERVER中时间的精度为1/300秒.
我今天也碰到了这个问题以前真的没注意到,所以以后查询的时候不要用between 用><<=>=就很好,而且不要比较毫秒,当要比较时间的时候就用个时间+1天或1秒看情况了,然后用个<或>