繁体   English   中英

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

[英]mysql - Select all where date variable is between STARTDATE column and ENDDATE column

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

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

因此,如果用户选择“ 2月”,我不仅需要包括startdate = 2的记录,还需要选择所有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月开始

也许有一种方法可以将查询分成子数组之类的东西?

例如,如果我仅选择2月,则不会显示任何以1月开始的结果。

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

采用

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM