2017-08-07 150 views
-5

之間存在的所有行我有一個表像這樣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年1月23日和2017年2月20日之間的日期它會告訴我:

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

當我選擇2017年1月10日和2017年2月1日之間的日子時,告訴我:

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 
+2

參見https://meta.stackoverflow.com/questions/333952 /爲什麼我應該提供-mcve-for-what-though-how-to-a-very-simple-sql-query – Strawberry

+0

MySQL是否支持'OVERLAPS'? – jarlh

+1

你嘗試過''之間'嗎?!? –

回答

0

我認爲這應該工作。 我使用:start:end作爲輸入值的佔位符。

查詢選擇所有員工的工作日期,當工作日期至少部分是您的輸入範圍的一部分。

可視化(I:輸入範圍,y:選擇,n:未選擇):

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

查詢:

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

這其實很簡單:如果事件A *開始*在事件B *結束*之前,事件A可以說與事件B重疊,並且*事件B *開始*之後*結束*。 – Strawberry

+0

@Strawberry這是正確的,更容易。謝謝你的提示,我改變了答案。 – Pharaoh