簡體   English   中英

如何在where condition(sql)中使用案例陳述?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM