-1

我想在 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

4

4 回答 4

6

我觉得这不是case去这里的正确方法,所以我认为这更像是:

select Nom
from tab
where (
    libelle != ''
    and (
        Nom like Nom1
        or Nom like Nom2
    )
)
or (
    libelle = ''
    and Nom like Nom3
)

对我来说,这似乎更容易阅读和理解。查询优化器甚至可能同意。

于 2012-12-14T15:54:13.240 回答
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

(与其他选项非常相似——尤其是蒂姆的)

于 2012-12-14T16:28:50.170 回答
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)

这至少应该让你走上正确的道路。

于 2012-12-14T17:48:59.713 回答
1

语法是:

   CASE WHEN libelle != '' THEN Nom1
        WHEN libelle /* OTHER CONDITION HERE */ THEN Nom2
        ELSE Nom3
   END
于 2012-12-14T15:49:41.390 回答