[英]How to use case statment in where condition(sql)?
我嘗試用sql編寫一個查詢,該查詢獲得一個參數,並在下面查詢的where部分使用此參數,但出現錯誤:我想這樣做:
如果@state
等於與2檢查在where
條件@state=2
如果@state
等於與3檢查在where
條件@state=3
如果@state
等於0,那么請不要入住where
的條件
我嘗試用大小寫寫此語句,但語法錯誤
SELECT *
FROM tbl1
WHERE @StartDate <= Cast([date] AS DATE)
AND Cast([date] AS DATE) <= @endDate
AND [reservetype] = @Type
AND CASE
WHEN @State = 2 THEN [state]=2
WHEN @State = 3 THEN [state]=3
WHEN @State = 0 then ....
END
如果要為此使用用case
,則邏輯為:
[state] = (CASE WHEN @State IN (2, 3) THEN @state
ELSE [state]
END)
假設state
不是NULL
,這將滿足您的要求。
注意:
我將條件寫為:
WHERE [date] >= @StartDate AND
[date] < DATEADD(day, 1, @endDate) AND
[reservetype] = @Type AND
((@state IN (2, 3) and [state] = @state) OR
(@state NOT IN (2, 3))
)
我更改了日期算法以刪除cast()
。 雖然鑄造日期/時間時,SQL Server可以使用索引date
,它可能會混淆一個復雜的WHERE
子句。 因此,此版本可能會根據索引進行更好的優化。
如果我沒記錯的話,您需要這個瑣碎的邏輯:
...
WHERE (@State = 0 or t.State = @State)
AND ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.