条件之间的倍数 SQL

Multiple between condition SQL

我正在执行一个 SQL 查询,我想在其中获取多个日期范围和多个时间范围之间的特定数据。

我的 table 看起来像这样:

ID date time
1 2021-01-01 10:00

这是我提出的要求:

SELECT * FROM myTable
WHERE (date BETWEEN "2021-01-01" AND "2021-01-05")
OR (date BETWEEN "2021-05-01" AND "2021-05-05")
AND (time date BETWEEN "10:00" AND "11:00")
OR (time date BETWEEN "14:00" AND "15:00")

首先,我只使用了 AND 运算符,但效果不佳,我看到有人说我们可以对此类内容使用 OR 运算符。 但问题是我这里的条件仍然是错误的,因为它没有像我想要的那样工作。它 returns 一个日期超出范围,时间在范围内,一个日期在范围内,时间在范围外。我只想查找介于每个日期范围和每次之间的日期。我可以有无限多个日期范围和时间范围。

and 的优先级高于 or。您可以使用括号将评估顺序强制为您想要的顺序:

SELECT * 
FROM myTable
WHERE ((date BETWEEN "2021-01-01" AND "2021-01-05") OR 
       (date BETWEEN "2021-05-01" AND "2021-05-05"))
      AND
      ((time date BETWEEN "10:00" AND "11:00") OR 
       (time date BETWEEN "14:00" AND "15:00"))