使用IF或Case来确定在WHERE语句中使用哪个字段

时间:2014-09-29 03:47:47

标签: sql sql-server-2008 tsql

我有一张表

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

3 个答案:

答案 0 :(得分:1)

您可以使用

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

答案 1 :(得分:0)

SELECT *
FROM TABLEA
WHERE (RecvdDateID > GETDATE() AND EnteredDateID > 20140630)
    OR (RecvdDateID <= GETDATE() AND RecvdDateID  > 20140630)

答案 2 :(得分:0)

或者只是为了简化生活,您可以使用用户定义的函数并在查询中使用它:

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

你可以创建一个函数MyCriteriaMatches,你可以在上面突出显示的情况下返回1,否则返回0。

希望这有帮助。