SQL - 选择两个日期之间存在的所有行

时间:2017-08-07 07:30:45

标签: mysql sql

我有一张这样的表

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

我想向每位员工展示两个日期之间的工作。 EXP: 当我选择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

1 个答案:

答案 0 :(得分:0)

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

当工作日期至少部分属于您的输入范围时,查询会选择所有具有工作日期的员工。

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

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

查询:

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