Between运算符返回空结果:Product表指定范围记录查询问题
解决Between查询返回空结果的问题
咱们一步步拆解你遇到的问题,找到根源和解决办法:
核心问题排查方向
1. 日期格式的解析歧义
你设置的start_date=03/04/2018和end_date=03/04/2018存在格式歧义:数据库可能默认按**MM/DD/YYYY(3月4日)解析,但你的记录里id=2的日期是03/04/2018 00:00:00,如果实际业务中是DD/MM/YYYY(4月3日)**的格式,那日期范围完全不匹配,直接导致筛选不到数据。
2. 日期范围的时间边界陷阱
即使日期格式正确,用BETWEEN start_date AND end_date时,03/04/2018会被默认解析为03/04/2018 00:00:00,这意味着BETWEEN只会匹配当天零点整的记录——如果有其他时间的记录(比如03/04/2018 12:00:00)就会被排除,不过你的id=2刚好是零点,这条可能不是主要问题,但也是常见的坑。
3. 查询语句的逻辑错误
可能你的查询语句写错了筛选逻辑,比如:
- 错误地把
min_price和max_price作为BETWEEN的两端,而不是用price去匹配这个范围 - 多条件之间用了
OR而不是AND,导致逻辑不成立
正确的查询语句示例
假设你的数据库支持标准SQL,且日期格式为DD/MM/YYYY(匹配你给出的记录格式),可以这样写:
SELECT id, price, datetime FROM Product WHERE price BETWEEN 5 AND 10 AND datetime >= '2018-04-03 00:00:00' AND datetime < '2018-04-04 00:00:00';
如果数据库默认用MM/DD/YYYY格式,就把日期改成'2018-03-04'开头的范围即可。
为什么不用BETWEEN处理日期?
BETWEEN是闭区间(包含两端),如果你的datetime字段有非零点的记录,BETWEEN '03/04/2018' AND '03/04/2018'只会匹配00:00:00的记录。用>=起始日期零点,<次日零点的方式,能涵盖当天所有时间的记录,更稳妥。
额外验证步骤
- 先单独测试价格筛选:
SELECT * FROM Product WHERE price BETWEEN 5 AND 10,看是否能返回id=2 - 单独测试日期筛选:
SELECT * FROM Product WHERE datetime >= '正确格式的起始日期' AND datetime < '次日日期',确认是否匹配目标记录 - 检查数据库的日期格式设置,确保输入的日期字符串能被正确解析
内容的提问来源于stack exchange,提问作者L. Page
相关产品推荐
相关产品推荐

