MariaDB中日期范围和时间范围之间的SQL查询

Posted

技术标签:

【中文标题】MariaDB中日期范围和时间范围之间的SQL查询【英文标题】:SQL Query between a date range and a time range in MariaDB 【发布时间】:2021-11-15 05:04:54 【问题描述】:

我无法编写此查询以提供任何结果。我也在使用 MariaDB。

SELECT CallDate AS Week_Of, 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) BETWEEN '17:00:00' AND '08:00:00'
GROUP BY AgentName

DATE_ADD 子句工作得很好,并在该时间间隔内给出结果,但只要我添加 TIME 函数,结果中就不会返回任何内容。 CallDate 格式为2021-09-21 HH:MM:SS 我也尝试使用 HOUR 代替 TIME,但它也没有返回任何内容。

我正在尝试从 DATE_ADD 子句中指定的范围内的任何一天拉出呼叫。只要是在 1700 到 0800 之间(下班后电话)。

【问题讨论】:

您的GROUP BY 列与SELECT 列不一致。 我不得不假设这样的时间范围会跨越 2 天!! 是的。所以我想在 2021-09-21 17:00:00 和 2021-09-22 08:00:00 之间拉动 【参考方案1】:

我认为您需要像这样检查两个日期并调整每个日期使用的时间

WHERE 
(CallDate > DATE_ADD(CURDATE(), INTERVAL -7 DAY) AND TIME(CallDate) > '17:00:00')
OR
(CallDate > DATE_ADD(CURDATE(), INTERVAL -6 DAY) AND TIME(CallDate) < '08:00:00')

【讨论】:

为什么使用 OR 而不是 AND? 不知道,脑子放个屁,改了 这仍然没有返回任何结果。但是,如果我注释掉AND (CallDate &gt; DATE_ADD(CURDATE(), INTERVAL -6 DAY) AND TIME(CallDate) &lt; '08:00:00'),那么它将在 17:00:00 之后返回结果 如果我注释掉另一个条件并取消注释前一个条件,那么它也可以工作。两者都未注释时似乎存在问题。 我刚刚用 OR 子句再次尝试,它提取了结果。你会认为 AND 应该在那里,但看起来你对 OR 是正确的。感谢您的帮助!

以上是关于MariaDB中日期范围和时间范围之间的SQL查询的主要内容,如果未能解决你的问题,请参考以下文章

SQL 之间不包括所有查询范围(日期)

SQL Server 查询日期范围之间一个月的总天数

sql 查询时间、日期范围内的数据

SQL 查询日期范围保存在 2 列中

【SQL语句】-范围查询

SQL如何编写返回缺失日期范围的查询?