我正在构建一个PHP项目工具,并且试图弄清楚如何在特定日期范围内选择(或排除)项目。每个项目在mysql表中都有一个“ start_date”和“ end_date”,但是BETWEEN似乎仅查看值本身,而不是我的书面值之间出现的日期。
例如,如果我尝试选择在7月16日至7月20日之间处于活动状态的项目,那么如何确保返回表中具有7月1日至7月20日开始和结束日期的行?
以下是无效的代码示例:
$sql = "SELECT *
FROM
projects
WHERE
proj_start_date BETWEEN '2018-07-16' AND '2018-07-20'
AND
proj_end_date BETWEEN '2018-07-16' AND '2018-07-20'
GROUP BY
proj_start_date";
能够的麻烦在于它无法抓住范围开始之前和之后结束的东西。
知道了!下面的正确答案使我步入正轨。这是达到目的的代码:
$sql = "
SELECT *
FROM
projects
WHERE
proj_start_date <= '2018-07-20'
AND
proj_end_date >= '2018-07-16'
GROUP BY
proj_start_date";
答案 0 :(得分:2)
如果您的列类型是datetime
或date
。
您的查询应为:
SELECT * FROM `tablename` WHERE start_date >= '2018-07-01' AND end_date <= '2018-07-20'
或之间:
SELECT * FROM `tablename` WHERE start_date BETWEEN '2018-07-01' AND '2018-07-20'