2010-06-30 55 views
1

我正在嘗試創建一個T-SQL case語句來根據字段是否爲NULL或者它是否包含值來過濾查詢。如果您可以將NULLNOT NULL作爲案例的結果分配,但這看起來不可行,那將很簡單。在CASE語句中將BIT匹配到DATETIME

這裏是僞代碼:

WHERE DateColumn = CASE @BitInput 
    WHEN 0 THEN (all null dates) 
    WHEN 1 THEN (any non-null date) 
    WHEN NULL THEN (return all rows) 

從我的理解中,WHEN 0條件可以通過不提供在所有一WHEN條件來實現(返回一個NULL值)。

WHEN 1條件似乎它可以使用通配符,但我得到了有關類型轉換的錯誤。將列分配給自己修復了這個問題。我不知道該怎麼辦WHEN NULL條件。我的內部邏輯似乎認爲將列分配給自己應該可以解決這個問題,但它並不像上面所說的那樣。

我已經使用動態SQL重新創建了這個,但由於各種原因,我寧願在本機代碼中創建它。

我會很感激任何輸入。謝謝。

回答

2

CASE表達式(如OMG Ponies所說)是混合和匹配數據類型(如您所發現的),此外,您無法使用=或WHEN與NULL進行比較。

WHERE 
    (@BitInput = 0 AND DateColumn IS NULL) 
    OR 
    (@BitInput = 1 AND DateColumn IS NOT NULL) 
    OR 
    @BitInput IS NULL 

你也許可以把它寫使用CASE,但你想要的是一個還是真的。

您還可以使用IF..ELSEUNION ALL到3例

+0

你的先生是一個紳士和學者更何況我的個人英雄的一天分開。感謝您及時的回覆。 – beardog 2010-06-30 17:42:11