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

PHP环境下多条件小写匹配SQL查询结果不符问题求助

修正SQL WHERE子句逻辑,获取目标客户指定日期数据

我发现你的问题出在WHERE子句的逻辑运算符优先级上!SQL里AND的优先级比OR高,所以你原来的条件实际会被解析成:

(DATE_FORMAT(...) = '2017-09' AND lower(customer) LIKE "%ota%") OR LOWER(customer) LIKE "%alkaip%" OR LOWER(customer) LIKE "%alve%" OR LOWER(customer) LIKE "%antako%"

这就导致那些不符合2017年9月日期条件的alkaip、alve、antako客户数据也被查询出来,而你想要的应该是同时满足日期条件+客户属于指定列表的结果,对吧?

修正后的SQL代码

SELECT DATE(date_time) dates, SUM(duration/60), customer, provider 
FROM cdr_sbc_2017 
WHERE DATE_FORMAT(CONVERT_TZ(disconnect_time,'+07:00','+07:00'),'%Y-%m') = '2017-09' 
  AND (LOWER(customer) LIKE "%ota%" OR LOWER(customer) LIKE "%alkaip%" OR LOWER(customer) LIKE "%alve%" OR LOWER(customer) LIKE "%antako%")
GROUP BY customer;

关键修正点

  1. 把所有客户匹配的OR条件用括号包裹起来,让这部分逻辑先执行,判断客户是否属于目标列表
  2. 再用AND和日期条件关联,确保只有同时满足日期和客户条件的数据才会被筛选

另外提个小优化:你写的CONVERT_TZ(disconnect_time,'+07:00','+07:00')其实等于直接用disconnect_time(时区转换前后是同一个时区),可以简化成DATE_FORMAT(disconnect_time,'%Y-%m') = '2017-09',代码会更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:21:10