2016-10-13 43 views
0
SELECT * FROM someTable WHERE someField = 'A' 
and (EndTime > @someTime OR EndTime IS NULL) 

上面是原始查詢。現在我有一個新的條件,看看是否帶走EndTime IS NULL如何有條件地刪除where子句中的條件?

SET @Throw = 1; 

IF @Throw = 1 
BEGIN 
    SELECT * FROM someTable WHERE someField = 'A' 
    and (EndTime > @someTime) 
END 
ELSE IF @Throw = 0 
BEGIN 
    SELECT * FROM someTable WHERE someField = 'A' 
    and (EndTime > @someTime OR EndTime IS NULL) 
END 

我想知道如果這可以實現1查詢本身或它必須在2查詢?

+0

只是爲了信息,爲什麼不把'結束時間IS NULL'在第一斷言或條件。它有助於表現。例如,上面的代碼應該是: - SELECT * FROM someTable WHERE someField ='A' 和(EndTime IS NULL或EndTime> @someTime)' –

回答

2
SELECT * FROM someTable WHERE someField = 'A' 
and (EndTime > @someTime OR (@Throw = 0 AND EndTime IS NULL)) 
0
SELECT * FROM someTable WHERE someField = 'A' 
    and (EndTime > @someTime AND @Throw = 1) OR ((EndTime > @someTime OR EndTime is NULL) AND @Throw = 0)