mysql - 选择日期变量位于STARTDATE列和ENDDATE列之间的所有位置

时间:2015-01-15 20:58:50

标签: php mysql sql-server date date-range

我有一个表单,用户选择一个月并查看该月内的所有记录。数据库记录开始日期和结束日期。

我需要查询开始日期和结束日期之间的所有记录。所以我无法查询MONTH(Data.startdate) <= $month,因为我需要它在开始和结束日期之间。所以基本上我需要它:
startdate&lt;月份&lt;结束日期

因此,如果用户选择“二月”,我不仅需要包含startdate = 2的记录,而且我需要选择二月份在开始日期和结束日期之间的所有记录。

我无法想出BETWEEN为此工作的方法,因为我认为这需要列名为第一,日期范围为变量。

更新
由于我正在寻找多个月,我不得不在一组括号中使用下面的答案与OR之间的组合。

参考查询:SELECT * FROM Data INNER JOIN Section on Data.section_id = Section.section_id INNER JOIN输入on Data.type_id = Type.type_id INNER JOIN Company on Data.company_id = Company.company_id INNER JOIN Materials on Data.materials_id = Materials.materials_id INNER JOIN Marked on Data.marked_id = Marked.marked_id WHERE Section.section_id = 1 AND YEAR(Data.data_startdate) = 2015 AND ((MONTH(Data.data_startdate) <= 1 AND MONTH(Data.data_enddate) >= 1) OR (MONTH(Data.data_startdate) <= 2 AND MONTH(Data.data_enddate) >= 2)) ORDER BY Data.data_startdate, Data.section_id, Data.type_id ASC

然而,当我遍历结果时,结果只显示一次,因为它只是一条记录。如何循环显示结果并显示类似下面的内容,而不必多次循环遍历整个结果数组,并根据月份检查每个结果。我要显示:
所有结果在1月份下降 所有结果都在2月份下降

现在结果显示为:
所有结果在1月开始 所有结果在2月开始

是否有办法将查询分成子数组或其他什么?

例如,如果我只选择2月,则不会显示从Jan开始的结果。

2 个答案:

答案 0 :(得分:1)

WHERE MONTH(Data.startdate) <= $month
AND MONTH(Data.enddate) >= $month

答案 1 :(得分:1)

使用

SELECT * FROM mytable WHERE $month BETWEEN MONTH(startDate) AND MONTH(endDate)