[英]Return Condition from case statement in where clause
通過搜索多個SO線程,我無法編寫查詢以在where子句中返回適當的條件。 例如,我有列Col1,它是int
而變量var1
作為varchar
現在我在下面的查詢中使用了它,但是它不起作用。
Where CASE WHEN var1 = '1' THEN (Col1 = 1)
WHEN var1 = '2' THEN (Col1 = 2)
ELSE AND (1= 1)
END
它給我syntax error near '='
。
編輯:
如果我想要類似的情況怎么辦
Col1 IN(條件...)
我認為應該是這樣。
Where Col1 = CASE WHEN var1 IN ('1','2') THEN var1 ELSE Col1 END
要么
Where Col1 = CASE var1 WHEN '1' THEN 1
WHEN '2' THEN 2
ELSE Col1 END ...
附帶說明一下,如果Col1 is nullable
並且need to select
它們,則使用;
Where Col1 is null OR
Col1 = CASE var1 WHEN '1' THEN 1
WHEN '2' THEN 2
ELSE Col1 END ...
CASE是一個返回值的表達式。 它不是用於像IF這樣的流邏輯的控制(盡管類似的關鍵字在某些語言(如VB)中確實可以那樣工作)。 嘗試:
WHERE Col1 = CASE
WHEN var1 = '1' THEN 1
WHEN var1 = '2' THEN 2
ELSE Col1
END
除非 Col1可為NULL, 否則這將按照您嘗試的代碼中的預期工作。 一種解決方法是不可顯示在數據中的不可思議的值:
WHERE COALESCE(Col1, -1) = CASE
...
ELSE COALESCE(Col1, -1) END
您需要將該列放在案例之外:
where Col1 = case when var1 = '1' then 1
when var1 = '2' then 2
end
OR (var1 != '1' AND var1 != '2')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.