【问题标题】:Check Date between two date columns from two dates mySQL从两个日期 mySQL 检查两个日期列之间的日期
【发布时间】:2019-08-05 00:12:00
【问题描述】:

我想检查记录是否存在。

表 1:

  S.No    StartDate         EndDate
 -------------------------------------
  1.      2019-10-15        2019-10-20
  2.      2019-10-10        2019-10-13
  3.      2019-10-21        2019-10-25

如果根据以下任何场景满足任何条件,我需要获取数据。

案例 1: 如果 date_from:2019-10-17 和 date_to:2019-10-19

输出:

  S.No    StartDate         EndDate
 -------------------------------------
  1.      2019-10-15        2019-10-20

案例 2: 如果 date_from:2019-10-14 和 date_to:2019-10-21

输出:

  S.No    StartDate         EndDate
 -------------------------------------
  1.      2019-10-15        2019-10-20
  3.      2019-10-21        2019-10-25

案例 3: 如果 date_from:2019-10-13 和 date_to:2019-10-16

输出:

  S.No    StartDate         EndDate
 -------------------------------------
  1.      2019-10-15        2019-10-20
  2.      2019-10-10        2019-10-13

案例 4: 如果 date_from:2019-10-17 和 date_to:2019-10-20

输出:

  S.No    StartDate         EndDate
 -------------------------------------
  1.      2019-10-15        2019-10-20

案例 5: 如果 date_from:2019-11-17 和 date_to:2019-11-20

输出:

  *No records

这是我尝试过的:

查询1:

SELECT * FROM Table1
WHERE StartDate BETWEEN **date_from** AND **date_to**
OR EndDate BETWEEN **date_from** AND **date_to**

查询2:

SELECT * FROM Table1
WHERE **date_from** BETWEEN StartDate AND EndDate 
OR **date_to** BETWEEN StartDate AND EndDate

我已经尝试过以下解决方案:

Check two date was not between two another date + MYSQl

check given date exists between two date column in mysql

【问题讨论】:

  • 有什么问题?

标签: mysql sql


【解决方案1】:

这是重叠日期范围问题。这是您的第一个场景的查询,您希望在其中查找 2019-10-172019-10-19 之间的匹配记录:

SELECT *
FROM yourTable
WHERE EndDate >= '2019-10-17' AND StartDate <= '2019-10-19';

更笼统地说:

SELECT *
FROM yourTable
WHERE EndDate >= <date_from> AND StartDate <= <date_to>;

如果您想在单个查询中包含两个日期范围,那么您可以简单地扩展 WHERE 子句:

SELECT *
FROM yourTable
WHERE
    (EndDate >= '2019-10-13' AND StartDate <= '2019-10-16') OR
    (EndDate >= '2019-10-17' AND StartDate <= '2019-10-19');

【讨论】:

  • 谢谢!但是有没有其他方法可以使用单个查询来实现所有输出。
  • 不确定您的想法。如果你想处理多个开始/结束对,那么你可以通过 OR 扩展我的 WHERE 子句。
  • 此场景适用于预订系统,需要检查给定两个日期之间是否有任何预订?
  • 我已经回答了这个问题。如果我的查询遗漏了您需要的内容,请说明那是什么。
  • @MohitGupta 。 . .蒂姆的解决方案是解决您的问题的最佳方式。我建议你删除你的答案并接受这个。
【解决方案2】:

此解决方案适用于上述所有情况

SELECT * FROM Table1
WHERE ( StartDate <= 'date_from' and EndDate >= 'date_from' )
OR ( 'date_from' <= StartDate and 'date_to' >= StartDate )
OR ( StartDate < 'date_to' and EndDate >= 'date_to' )

参考:

SQL query to search for room availability

【讨论】:

  • 恕我直言,您发布此答案毫无意义。它没有解释你是如何得到这个答案的,它对其他读者也不会很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多