2014-09-29 65 views
0

我有使用IF或案例,以確定在使用什麼領域WHERE語句

Name EnteredDateID RecvdDateID 

A  20140901  20240901  
B  20140901  20140901 
C  20140901  20140901 
D  20140901  20140901 
E  20140901  20110901 
F  20140901  20140901 
G  20140901  20110901 

我需要編寫一個查詢,會做一桌子下面

SELECT * FROM TABLEA WHERE 

,這是在那裏我摔倒

IF RecvdDateID > GETDATE() THEN USE 
EnteredDateID > 20140630 
ELSE USE THE 
RecvdDateID > 20140630 

所以我最終會與

Name EnteredDateID RecvdDateID 

A  20140901  20240901  
B  20140901  20140901 
C  20140901  20140901 
D  20140901  20140901 
F  20140901  20140901 

回答

1

您可以使用

SELECT * FROM TABLEA WHERE 
20140630 < 
CASE WHEN RecvdDateID > GETDATE() THEN 
    EnteredDateID 
ELSE 
    RecvdDateID  
END 
0
SELECT * 
FROM TABLEA 
WHERE (RecvdDateID > GETDATE() AND EnteredDateID > 20140630) 
    OR (RecvdDateID <= GETDATE() AND RecvdDateID > 20140630) 
0

或者只是爲了讓生活更簡單,你可以使用一個用戶定義的函數,並在查詢中使用它:

SELECT * 
FROM TABLEA 
WHERE dbo.MyCriteriaMatches(RecvdDateID,EnteredDateId) =1 

,你可以創建功能MyCriteriaMatches在這裏您可以將案件退回1你已經突出上面的其他0.

希望這會有所幫助。

+1

這可能是簡單的,但它也增加了另一個數據庫對象的依賴;它也可能效率較低;由於表中每一行的函數調用開銷,以及無法使用索引來滿足謂詞。 – spencer7593 2014-09-29 04:02:49