You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite SELECT查询WHERE子句不生效、过滤规则被忽略问题求助

问题原因
  • 逻辑运算符优先级错误:SQL 中AND的优先级高于OR,你最初未把两个地点条件用括号包裹时,实际执行逻辑为(地点符合k%ln) OR (地点符合d%sseldorf 且 日期符合 且 距离符合),只要地点匹配k%ln的记录都会直接返回,完全忽略后续的日期、距离过滤条件。
  • 日期值格式错误未加引号:你写的DATE(Time) BETWEEN 2021/10/06 and 2021/10/11中,未加引号的日期会被SQLite解析为算术表达式:2021÷10÷6≈33.68,2021÷10÷11≈18.37,最终等价于BETWEEN 33.68 AND 18.37,这个区间本身无效,日期过滤条件直接失效,因此会返回所有符合地点条件的记录,不管日期和距离是否符合要求。
解决方案

修正括号逻辑、日期格式即可正常执行,正确查询语句如下:

SELECT * 
FROM Gasstation
WHERE 
  (LOWER(Place) LIKE 'k%ln' OR LOWER(Place) LIKE 'd%sseldorf')
  AND (DATE(Time) BETWEEN '2021-10-06' AND '2021-10-11')
  AND Distance <= 0.3;

补充注意事项:

  • SQLite的DATE()函数返回的是YYYY-MM-DD格式的字符串,用于比较的日期值必须用单引号包裹,且使用横杠-作为分隔符,避免被解析为算术运算。
  • 所有用OR连接的并列条件必须用括号单独包裹,避免被AND的高优先级打乱判断逻辑。

内容的提问来源于stack exchange,提问作者Erwin109

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:39:01