MariaDB按日期+时间范围查询无结果:筛选17点至次日8点非工作时段通话
问题原因
BETWEEN运算符要求左边界值必须小于等于右边界值才会返回匹配结果,而时间类型的17:00:00数值大于08:00:00,所以你写的时间过滤条件没有任何符合的记录,自然返回空结果。
修正方案
将跨天的非工作时段拆分为两个独立的时间区间,用OR关联即可,注意要给时间条件加括号避免和其他WHERE条件的逻辑优先级冲突。
修正后的完整SQL语句:
SELECT MIN(CallDate) AS Week_Of, -- 原写法SELECT里的CallDate不在GROUP BY中,严格SQL模式会报错,这里用MIN取一周最早时间标识区间,你也可以根据业务调整聚合方式 AgentName, COUNT(*) AS TOTAL_Calls, SUM(CASE WHEN Accepted = 'ANSWERED' THEN 1 ELSE 0 END) AS Answered, SUM(CASE WHEN Accepted = 'NO ANSWER' THEN 1 ELSE 0 END) AS NoAnswer FROM jshou_custom.afterhours WHERE CallDate >= DATE_ADD(NOW(), INTERVAL -1 WEEK) AND ( TIME(CallDate) >= '17:00:00' OR TIME(CallDate) <= '08:00:00' ) GROUP BY AgentName
补充说明:
如果你想用HOUR函数实现也可以,把时间过滤条件替换为如下写法即可,逻辑一致:
AND (HOUR(CallDate) >= 17 OR HOUR(CallDate) < 8)
如果你的非工作时段边界需要精确到时分秒,优先用TIME函数的写法;仅按小时筛选时用HOUR函数更简洁。
内容的提问来源于stack exchange,提问作者Blukraken
相关产品推荐
相关产品推荐

