【问题标题】:check if a period is included between two dates检查两个日期之间是否包含句点
【发布时间】:2012-12-04 14:57:32
【问题描述】:

我有一个这样的 mysql 表:

   | ID | ID_period | date_start |  date_end  |
   | 1  |   1       | 0000-07-01 | 0000-08-31 |
   | 2  |   2       | 0000-09-01 | 0000-10-30 |
   | 3  |   3       | 0000-11-01 | 0000-12-28 |
   | 4  |   4       | 0000-11-01 | 0000-03-31 |

如何选择 0000/07/14 - 0000/08/25 期间包含的 ID?

date_start 和 date_end 列是 DATE 格式。

问题是,如果我搜索一个时期(包括和相交),即:从 0000-12-12 到 0000-01-25,我从选择中得到 0 条记录,我猜那一年是' 0000'.. 我该如何解决?

另一个问题是,如果我搜索 11-01 到 12-31 这样的时期,我得到 0 个结果。因为 date_end 中的最后一天 12 月是 28 .. 但是如果我搜索时期 11-01 到 12- 31 是因为我希望包含所有记录.. 所以我想获得 id=3 和 id=4 的记录

目前我正在使用以下查询:

SELECT ... WHERE '12' BETWEEN MONTH(date_start) and MONTH(date_end)
AND '15' BETWEEN DAY(date_start) and DAY(date_end)
AND '03' BETWEEN MONTH(date_start) and MONTH(date_end)
AND '28' BETWEEN DAY(date_start) and DAY(date_end)

【问题讨论】:

  • 您是指与该时期重叠或完全包含在该时期内的所有IDS?在您的示例中,这似乎无关紧要,但可能在您的真实数据中可能。
  • “包含”是什么意思?完全在里面还是相交?
  • 问题是,如果我搜索一个时期(包括和相交),即:从 0000-12-12 到 0000-01-25 我从选择中得到 0 条记录,我猜那一年是'0000'..我该如何解决它?

标签: php mysql sql date datetime


【解决方案1】:
SELECT  *
FROM    mytable
WHERE   date_start BETWEEN '0000-07-14' AND '0000-08-25'
        OR date_end BETWEEN '0000-07-14' AND '0000-08-25'
        OR (date_start<'0000-07-14' AND date_end>'0000-08-25')

【讨论】:

  • 问题是,如果我搜索一个时期(包括和相交),即:从 0000-12-12 到 0000-01-25 我从选择中得到 0 条记录,我猜那一年是'0000'..我该如何解决它?
  • 12-12 到 01-25?结束日期可以小于开始日期吗?
  • 废话.. 那么如何找到周期为 12-12 到 01-15 的记录呢?
  • 我总是在 MSSQL 中使用date_start &lt; oth_date_end and date_end &gt; oth_date_start。但是,MySQL 似乎更喜欢这种解决方案。奇怪……我改天再调查一下这个计划。谢谢! P.S.:在 MySQL 中它太慢了,我寻找另一种方法并找到了这个答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 2012-09-19
  • 1970-01-01
  • 2017-07-07
  • 2016-05-31
相关资源
最近更新 更多