2014-04-03 214 views
3

我有一個存儲過程檢查在我的數據庫中預定的假期,它不應該考慮狀態爲「已拒絕」或「已取消」的假期,但是在我的數據庫中只有一條記錄具有狀態的下降,但這個選擇語句返回1?存儲過程返回錯誤的值?

 SELECT COUNT(*) JobRoleID 
     FROM  Employees 
     RIGHT JOIN Holidays 
     ON   Employees.ID = Holidays.EmployeeID 
     WHERE  Holidays.Status <> 'Declined' AND Holidays.Status <> 'Cancelled' 
     AND  (Holidays.Startdate <= '2014/04/28' AND Holidays.Enddate >= '2014/04/30') 
     OR   (Holidays.Startdate >= '2014/04/28' AND Holidays.Enddate <= '2014/04/30') 
     OR   (Holidays.Startdate <= '2014/04/30' AND Holidays.Enddate >= '2014/04/30') 
     OR   (Holidays.Startdate <= '2014/04/28' AND Holidays.Enddate >= '2014/04/28') 
     OR   (Holidays.StartDate = '2014/04/28' AND Holidays.EndDate = '2014/04/30') 
+0

返回此行的假期的狀態是什麼? –

+0

已拒絕。 @我知道。 – Elwin

回答

2

運營商的優先順序需要在這裏考慮。

Not --> AND --> OR 

不優先於AND,AND優先於OR。有了這些嵌套的AND和OR,總是把它們放在paranthesis中總是會更好。

WHERE  Holidays.[Status] <> 'Declined' AND Holidays.[Status] <> 'Cancelled' 
AND  
    (  (Holidays.Startdate <= '2014/04/28' AND Holidays.Enddate >= '2014/04/30') 
     OR (Holidays.Startdate >= '2014/04/28' AND Holidays.Enddate <= '2014/04/30') 
     OR (Holidays.Startdate <= '2014/04/30' AND Holidays.Enddate >= '2014/04/30') 
     OR (Holidays.Startdate <= '2014/04/28' AND Holidays.Enddate >= '2014/04/28') 
     OR (Holidays.StartDate = '2014/04/28' AND Holidays.EndDate = '2014/04/30') 
    ) 

此外,還要避免使用SQL Server關鍵詞作爲列名,如果你有一些使用方括號周圍[]在SQL使用它們時。

+0

謝謝,這是現在的工作:) – Elwin

+0

沒有問題很高興它幫助:) –

2
WHERE A AND B AND C OR D AND E OR F AND G 

被視爲同

WHERE (A AND B AND C) OR (D AND E) OR (F AND G) 

因此,如果任何比第一個之外的其他日期比較的其實都是真實的,那麼整個WHERE條款感到滿意。

順便說一句,它看起來像你試圖找出兩個日期範圍是否重疊,並在一個非常複雜的問題。你只需要做兩個比較。兩個日期範圍重疊,如果:

  • 第一區域的第二範圍年底前開始,
  • 第二區域的第一範圍年底前開始

所以,是這樣的:

SELECT COUNT(*) JobRoleID 
    FROM  Employees 
    RIGHT JOIN Holidays 
    ON   Employees.ID = Holidays.EmployeeID 
    WHERE  Holidays.Status <> 'Declined' AND Holidays.Status <> 'Cancelled' 
    AND Holidays.StartDate <= '20140430' AND '20140428' <= Holidays.EndDate 

應該等同於您的多重比較。

+0

感謝您的幫助:) – Elwin