'08:30:00' 并且 开始 '2017-10-01' 并且 开始 < '2017-11-01' 这是我尝试过的: SELECT Entrada , Said-6ren">
gpt4 book ai didi

mysql "AND"日期时间列上的子句两次

转载 作者:行者123 更新时间:2023-11-29 18:19:24 25 4
gpt4 key购买 nike

我正在尝试检索日期时间行

开始 > '08:30:00' 并且
开始 < '18:00:00'以及
开始 > '2017-10-01' 并且
开始 < '2017-11-01'

这是我尝试过的:

SELECT Entrada , Saida FROM table 
WHERE Saida IS NOT NULL
AND TIME(Entrada) BETWEEN '08:30:00' AND '18:00:00'
AND DATE(Entrada) BETWEEN '2017-04-01' AND '2017-05-01'
ORDER BY Entrada ASC

这将返回“2017-04-01”和“2017-05-01”之间的行,但不会返回“08:30:00”和“18:00:00”之间的行。

那么我该如何处理这种情况呢?

最佳答案

问题不清楚,但我假设您想要获取值为 Entrada 的行2017 年 4 月,8:30 之间和18:00 .

您发布的查询应该可以正常工作,但是由于使用了函数( DATE(Entrada)TIME(Entrada) ),它无法使用索引。它处理整个表,并且随着时间的推移和记录堆积到表中,它的运行速度会变慢。

您有 Entrada 的索引吗?专栏,不是吗?

解决办法是替换DATE(Entrada)与比较 Entrada 的值的条件日期间隔包括您想要的所有每日间隔(整个 2017 年 4 月,包括夜间)。这样的条件将使用 Entrada 上的索引列来限制它进一步处理的行。第二个条件(针对 TIME(Entrada) )将仅处理由第一个条件过滤的记录,而不是像现在这样处理表中的所有记录。

查询是

SELECT Entrada, Saida
FROM table
WHERE Saida IS NOT NULL
AND Entrada BETWEEN '2017-04-01 00:00:00' AND '2017-04-30 23:59:59'
AND TIME(Entrada) BETWEEN '08:30:00' AND '18:00:00'
ORDER BY Entrada ASC

您可以使用Entrada BETWEEN '2017-04-01 08:30:00' AND '2017-04-30 18:00:00'也是如此。

关于mysql "AND"日期时间列上的子句两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46725818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com