MySQL“之间”的条款不包括在内?
如果我使用between
子句运行查询,它似乎排除结束值。
例如:
select * from person where dob between '2011-01-01' and '2011-01-31'
这从“2011-01-01”到“2011-01-30”获得了dob
所有结果; 跳过loggingdob
是“2011-01-31”的logging。 任何人都可以解释为什么这个查询的行为是这样的,我怎么可以修改它包括logging,其中dob
是'2011-01-31'? (因为用户已经select了结束date而不加1)。
该领域dob
可能有一个时间组件。
截断它:
select * from person where CAST(dob AS DATE) between '2011-01-01' and '2011-01-31'
从MySQL手册 :
这相当于expression式(min <= expr AND expr <= max)
问题是2011-01-31真的是2011-01-31 00:00:00。 那是一天的开始。 一天中的一切都不包括在内。
select * from person where dob between '2011-01-01 00:00:00' and '2011-01-31 23:59:59'
您在查询中引用的字段是datetypes还是date时间types?
您所描述的行为的一个常见原因是当您使用DateTimetypes时,您确实应该使用Datetypes。 也就是说,除非你真的需要知道什么时候出生,只要使用datetypes即可。
最后一天没有被包含在结果中的原因是查询假定您在查询中未指定date的时间部分。
即:您的查询在2011-01-30和2011-01-31之间被解释为午夜,但是数据可能在2011-01-31当天晚些时候有一个值。
build议:如果是DateTimetypes,则将该字段更改为Datetypes。
嗨这个查询适合我,
select * from person where dob between '2011-01-01' and '2011-01-31 23:59:59'
select * from person where DATE(dob) between '2011-01-01' and '2011-01-31'
令人惊讶的是,这种转换是MySQL中许多问题的解决scheme。
设置较高的date到date+ 1天,所以在你的情况下,将其设置为2011-02-01。