我想做的是,當@aValue引數像'abc%'時,就運行
select
f.姓名, f.金額, f.日期
from
假表f
where f.name like @aValue
and f.date > '01/01/2000'
否則,如果@aValue引數不像'abc%',那么就選擇f.name等于@aValue的所有記錄。
select
f.姓名, f.金額, f.日期
from
假表f
where f.name = @aValue
and f.date > '01/01/2000'
我試圖在我的Where中使用CASE陳述句來完成這個任務。在我的where陳述句中,我得到了一個錯誤
LIKE附近的語法不正確
。
我的查詢:
Declare @aValue varchar(5) = 'abcde'。
-- @aValue = 'xyz';/span>
select
f.姓名, f.金額, f.日期
from
假表f
where
f.name =case
when @aValue 'abc%'/span>
then f.name like @aValue
else f.name = @ aValue
end end
and f.date > '01/01/2000'
我做錯了什么,導致了語法錯誤?
uj5u.com熱心網友回復:
代替CASE運算式,使用OR和AND運算子,像這樣:
WHERE (
(@aValue LIKE 'abc%' AND f. name LIKE @aValue)
或者
(@aValue NOT LIKE 'abc%' AND f. name = @aValue)
)
and f.date > '01/01/2000'
uj5u.com熱心網友回復:
你可以用布爾邏輯來代替在CASE運算式中雜耍的條件:
WHERE
(
f.name = @aValue
OR @aValue
(
@aValue LIKE 'abc%'/span>
and and
f.name LIKE 'abc%'
)
)
uj5u.com熱心網友回復:
我建議使用union,并為每一種情況進行查詢,這通常比嘗試結合多種標準要好,因為這可能會妨礙索引的有效使用。
大致如下,第一個測驗@value為真應該意味著只有一個或另一個查詢被實際執行。
select </span>columns>/span>
from table
where @value like 'abc%' and name like @value '%'
union all
select </span>columns>/span>
from table
where @value not like 'abc%' and name = @value
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/306849.html
標籤:
下一篇:在圖表中為趨勢線定義資料的困惑
