【问题标题】:SQL - Select all row that exist between two dates [closed]SQL - 选择两个日期之间存在的所有行[关闭]
【发布时间】:2017-08-07 07:30:45
【问题描述】:

我有一张这样的桌子

employee       | wrok_from     |until
-------------------------------------------
Emp1           | 2017-01-01    |2017-01-15
Emp2           | 2017-01-10    |2017-01-25
Emp3           | 2017-01-20    |2017-02-10
Emp4           | 2017-01-30    |2017-02-20

我想向每位员工展示在两个日期之间工作的情况。 经验: 当我选择 2017-01-23 和 2017-02-20 之间的日期时,它会显示:

Emp2           | 2017-01-10    |2017-01-25
Emp3           | 2017-01-20    |2017-02-10
Emp4           | 2017-01-30    |2017-02-20

当我选择 2017-01-10 和 2017-02-01 之间的日期时,它会显示:

Emp1           | 2017-01-01    |2017-01-15
Emp2           | 2017-01-10    |2017-01-25
Emp3           | 2017-01-20    |2017-02-10
Emp4           | 2017-01-30    |2017-02-20

【问题讨论】:

  • MySQL 是否支持OVERLAPS
  • 你试过Between?!?
  • 我知道如何使用之间。但我仍然找不到答案。
  • 如果事件A开始在事件B结束之前,结束之后事件A可以说与事件B重叠事件 B开始

标签: mysql sql


【解决方案1】:

我认为这应该可行。 我使用:start:end 作为输入值的占位符。

当工作日期至少部分在您的输入范围内时,查询会选择所有员工及其工作日期。

可视化(I:输入范围,y:选中,n:未选中):

--------IIIIIIIIIIIIIIIIIIII----------
--nnn-yyyy---yyyy---------yyyyy----nn-

查询:

SELECT * 
FROM workdates
WHERE     
    work_from < :end AND
    until > :start

【讨论】:

  • 其实很简单:如果事件A开始在事件B结束之前结束,那么事件A可以说和事件B重叠 在事件 B 开始之后。
  • @Strawberry 这是正确的,而且容易得多。谢谢你的提示,我改变了答案。
猜你喜欢
  • 1970-01-01
  • 2018-12-26
  • 1970-01-01
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 2012-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多