我想在 SQL Server 中执行此查询,但它不起作用:
Select Nom from tab
WHERE
Nom LIKE
CASE WHEN libelle !='' then
Nom1
OR
Nom2
else
Nom3
end
任何帮助将不胜感激
更新:从 OP 评论中添加:
我想验证 libelle 是否像 nom1 或像 nom2 一样为空,否则(如果 libelle 为空) nom 像 nom3
我想在 SQL Server 中执行此查询,但它不起作用:
Select Nom from tab
WHERE
Nom LIKE
CASE WHEN libelle !='' then
Nom1
OR
Nom2
else
Nom3
end
任何帮助将不胜感激
更新:从 OP 评论中添加:
我想验证 libelle 是否像 nom1 或像 nom2 一样为空,否则(如果 libelle 为空) nom 像 nom3
我觉得这不是case
去这里的正确方法,所以我认为这更像是:
select Nom
from tab
where (
libelle != ''
and (
Nom like Nom1
or Nom like Nom2
)
)
or (
libelle = ''
and Nom like Nom3
)
对我来说,这似乎更容易阅读和理解。查询优化器甚至可能同意。
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
(与其他选项非常相似——尤其是蒂姆的)
因此,您当时正在尝试执行动态 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)
这至少应该让你走上正确的道路。
语法是:
CASE WHEN libelle != '' THEN Nom1
WHEN libelle /* OTHER CONDITION HERE */ THEN Nom2
ELSE Nom3
END