簡體   English   中英

在WHERE子句的CASE表達式內使用LIKE謂詞

[英]Using LIKE predicate inside CASE expression in WHERE clause

我有一張名字表:

約翰
彼得
彼得·保羅
瑪麗

我有這些名稱的下拉列表,並且在頂部添加了“全部”作為選項。

我想將從下拉列表中選擇的名稱作為參數傳遞給where子句。

我想做的是只有在name不作為'All'傳遞時才具有where子句

SELECT City, State
FROM EmployeeDetails
WHERE @NAME =
              CASE @NAME
                         WHEN 'All' THEN '1=1'
              ELSE (EmployeeDetails.NAME LIKE '' + @NAME + '%')

我無法使它正常工作。 ELSE語句在單詞“ LIKE”附近給出錯誤“語法不正確”。

查看其他我發現的StackOverflow問題:

  1. CASE語句返回標量值,因此可以理解它不喜歡我的LIKE語句。
  2. 將ELSE子句放在單引號中不會返回任何結果(break where子句)
  3. 嘗試執行IF(@NAME ='All')會破壞where子句,並且在StackOverflow的每個問題中,共識是將IF語句轉換為CASE語句。

當不在CASE語句中運行WHERE子句時,它適用於特定名稱,例如:

WHERE (EmployeeDetails.NAME LIKE '' + @NAME + '%')

如果我搜索Peter,它將返回2個預期結果。 瑪麗1結果,等等。
我顯然不能通過“全部”。

不要在where使用case 只需做:

SELECT City, State
FROM EmployeeDetails
WHERE (@NAME = 'All') OR (EmployeeDetails.NAME LIKE '' + @NAME + '%');

我不確定'' +的目的是什么,但您有疑問嗎,所以我將其保留。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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