2014-09-29 64 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