ASD*_*ASD 137 mysql sql between
如果我使用between子句运行查询,它似乎排除了结束值.
例如:
select * from person where dob between '2011-01-01' and '2011-01-31'
Run Code Online (Sandbox Code Playgroud)
这dob将从'2011-01-01'到'2011-01-30' 获得所有结果; 跳过记录在哪里dob'2011-01-31'.任何人都可以解释为什么这个查询的行为方式,以及我如何修改它以包含记录dob'2011-01-31'?(不添加1到结束日期,因为它已被用户选中.)
Fra*_*ens 292
从MySQL手册:
这相当于表达式(min <= expr AND expr <= max)
tia*_*014 168
该字段dob可能具有时间组件.
截断它:
select * from person
where CAST(dob AS DATE) between '2011-01-01' and '2011-01-31'
Run Code Online (Sandbox Code Playgroud)
Dan*_*rth 94
问题是2011-01-31真的是2011-01-31 00:00:00.那是一天的开始.白天的一切都不包括在内.
Gau*_*rav 30
select * from person where dob between '2011-01-01 00:00:00' and '2011-01-31 23:59:59'
Run Code Online (Sandbox Code Playgroud)
您在查询中引用的字段是Date类型还是DateTime类型?
您描述的行为的常见原因是当您使用DateTime类型时,您应该使用Date类型.也就是说,除非你真的需要知道某人出生的时间,否则只需使用日期类型即可.
最后一天未包含在结果中的原因是查询假定您未在查询中指定的日期的时间部分的方式.
即:您的查询被解释为2011-01-30和2011-01-31之间的午夜,但数据可能在2011-01-31的当天晚些时候有一个值.
建议:如果字段是DateTime类型,请将字段更改为Date类型.
小智 6
嗨,这个查询对我有用,
select * from person where dob between '2011-01-01' and '2011-01-31 23:59:59'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
115759 次 |
| 最近记录: |