我想在SQL Server中执行此查询,但它不起作用:
Select Nom from tab
WHERE
Nom LIKE
CASE WHEN libelle !='' then
Nom1
OR
Nom2
else
Nom3
end
任何帮助都将不胜感激
更新:从OP评论中添加:
我想验证libelle不是像nom1那样空的nom还是像nom2 else(如果libelle是空的)nom nom nom3
答案 0 :(得分:6)
我不认为case
是正确的方式,所以我看到这更像是:
select Nom
from tab
where (
libelle != ''
and (
Nom like Nom1
or Nom like Nom2
)
)
or (
libelle = ''
and Nom like Nom3
)
对我来说,阅读和理解似乎更简单。查询优化器甚至可能同意。
答案 1 :(得分:3)
SELECT Nom
FROM tab
WHERE
1 = CASE
WHEN libelle != '' AND (Nom like Nom1 OR Nom like Nom2) THEN 1
WHEN libelle = '' AND Nom like Nom3 THEN 1
ELSE 0
END
(非常类似于其他选项 - 特别是蒂姆的)
答案 2 :(得分:3)
所以你试图做动态SQL然后,我不相信你可以像使用case语句那样做,这可能会起作用:
declare @sql nvarchar(100)
declare @libelle nvarchar(20)
--Set @libelle to something (can be via a query, or a stored proc parameter etc rather than just a string like here
set @libelle = ''
set @sql = 'SELECT Nom FROM tab WHERE Nom LIKE'
IF @libelle = ''
SET @sql = @sql + ' ''Nom3'''
ELSE
SET @sql = @sql + ' ''Nom1'' OR Nom LIKE ''Nom2'''
EXEC (@sql)
这至少应该让你走上正确的道路。
答案 3 :(得分:1)
语法为:
CASE WHEN libelle != '' THEN Nom1
WHEN libelle /* OTHER CONDITION HERE */ THEN Nom2
ELSE Nom3
END