【问题标题】:mysql - Select all where date variable is between STARTDATE column and ENDDATE columnmysql - 选择日期变量在 STARTDATE 列和 ENDDATE 列之间的所有位置
【发布时间】:2015-03-14 09:41:05
【问题描述】:

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

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

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

我想不出一种方法让 BETWEEN 解决这个问题,因为我认为这需要列名在前,日期范围是变量。

更新
由于我正在寻找多个月,因此我不得不在一组括号内使用以下答案的组合,并在两者之间使用 OR。

查询参考:SELECT * FROM Data INNER JOIN Section on Data.section_id = Section.section_id INNER JOINTypeon 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 月,则不会显示从 1 月开始的结果。

【问题讨论】:

  • 有一个“AND”这个词在 SQL 中非常有用。
  • 请澄清两件事:当用户选择一个月时,您想要过去或未来任何一年的那个月的事件吗?其次,如果间隔的任何部分(开始-结束)位于所选月份,请确认您希望选择一条记录。
  • 我认为除了“月框”之外,您可能会考虑添加“年框”,因为只有月份,当用户选择“二月”时,他/她可能会得到(取决于您的数据库数据)以下日期:2009-02-012013-02-052014-02-11。但是,这可能是您的预期行为。
  • 我也按年份查询,但我正在尝试一个更简单的示例来说明我需要做什么。

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


【解决方案1】:

使用

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

【讨论】:

  • 我试过这个,但我得到一个错误。如果我将变量放在BETWEEN 之前,它似乎不起作用。
  • 你有哪个错误,因为我用一个类似的表测试了这个,我有一个日期范围,它可以工作
【解决方案2】:
WHERE MONTH(Data.startdate) <= $month
AND MONTH(Data.enddate) >= $month

【讨论】:

  • 这肯定有助于解决问题,但我将如何遍历结果并显示每个月内的所有记录,而不是只显示该月开始的所有记录。
  • 嗯...这与原始问题完全不同。可能值得问一个新的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多