在SQL中使用CASE中的LIKE

时间:2011-11-11 14:26:10

标签: sql tsql case sql-like

我想选择包含@selctDescription参数内容的记录,但仅当@selctDescription不为空时。

我有以下内容,但不起作用:

(t.[description] LIKE 
  (
  CASE 
  WHEN @selctDescription = '' THEN t.[description] 
  ELSE ('%' @selctDescription '%') 
  END
  )
)

有人能指出我正确的方向吗?

5 个答案:

答案 0 :(得分:4)

SELECT * 
FROM Table
WHERE 
  ((@selctDescription IS NULL OR @selctDescription = '') 
   OR
   (t.[description] LIKE '%' + @selctDescription +'%'))

答案 1 :(得分:2)

@selctDescription = '' OR t.[description] LIKE '%' + @selctDescription + '%'

答案 2 :(得分:2)

我认为您的代码相当于:

t.[description]  LIKE  '%' + @selctDescription + '%' 

另一方面,你的描述表明你想要这个:

@selctDescription <> ''
AND t.[description]  LIKE  '%' + @selctDescription + '%' 

答案 3 :(得分:2)

对你有几点想法......

如果你有'%' @selctDescription '%',你只需要在字符串之间+来连接它们。您的代码将按原样运行。

  • '%' + @selctDescription + '%'


此外,注意您甚至不需要CASE语句是有用的,因为当参数为空时,您会得到'%%',这仍将匹配所有内容。


这很有用,因为目前在LIKE语句的两侧都有表字段。这真的会伤害优化者。如果我使用CASE,我会更倾向于坚持......

t.[description] LIKE (CASE WHEN @selctDescription = '' THEN '%' ELSE ('%' + @selctDescription + '%') END)

这样做的好处是CASE语句的结果可以在执行查询之前作为标量值执行一次。而不是重新计算行。


然后说,它在功能上与...相同......

t.[description] LIKE ('%' + @selctDescription + '%')

答案 4 :(得分:1)

根据您的第一行和评论,您需要进行以下选择:

Select * from table
  where field <> ''
  and field like '%' + @selctDescription + '%'

但是你必须放置正确的字段,而@selctDesciption必须是文本(char,nchar,varchar,nvarchar,...)。