0

如何在 SQL 中编写以下语句。

它给了我类似的错误。

select * from a
where
a.Title = case when @Title is null or @Title = '' then a.Title else like %@Title% end
4

8 回答 8

1

这可以通过以下方式完成:

select * from a
where ISNULL(@Title, '') = '' or a.Title like '%' + @Title + '%'
于 2015-06-05T06:30:50.703 回答
0

语法错误是因为您使用的 %LIKE% 不是有效的构造。要获得所需的结果,您可以根据条件运行两个不同的查询,如下所示:

if (@Title = null or @Title = '')
select * from a where a.Title = a.Title
else
select * from a where title like @Title
于 2013-10-16T01:56:21.253 回答
0

这只会处理空值,但也许有人可以修改它来处理你的空 char/varchar 值......

SELECT *
FROM   a
WHERE  a.Title = COALESCE(@Title, a.Title)
于 2013-10-16T01:47:05.137 回答
0

根据您对过滤条件的评论,这应该是您所追求的:

select * from a
where @Title is null or @Title = '' or a.Title like %@Title%
于 2013-10-16T01:47:06.830 回答
0

你不能像那样混合你的运算符(= 和 like)。看起来您正在尝试构建一个显示“like %Title%”的字符串,但您不能这样做。Case 将简单地返回一个值以与某物(a.title)进行比较。正如其他几个人所说,您需要在两个测试之间使用 OR。

于 2013-10-16T04:11:33.493 回答
0

尝试这个 :

select 
* 
from @a a
where
a.Title = case when (@Title is null or @Title = '') then a.Title else @Title end
于 2013-10-16T05:54:29.507 回答
0

只需将运算符更改为,因为输出LIKE之间没有区别a.title = a.titlea.title like a.title

select *
from a
where a.Title like case when @Title is null or @Title = '' then a.Title else %@Title% end
于 2015-06-05T06:25:28.797 回答
0

您可以使用@Giorgi Nakeuri 的答案,但为了澄清:
在您的查询中有一些错误:

  1. 您使用%@Title%after LIKEthat 是一个无效的表达式,您需要在LIKElike之后使用字符文字LIKE '%' + @Title + '%'
  2. 您应该CASE首先在您的语句中的所有分支中使用相同类型的结果a.title然后like %@Title%

所以你正确的查询应该是这样的:

SELECT *
FROM a
WHERE 
    1 = CASE
            WHEN @Title IS NULL THEN 1
            WHEN @Title = '' THEN 1
            WHEN a.Title LIKE '%' + @Title + '%' THEN 1
            ELSE 0
        END

但是你可以像这样简化它:

SELECT *
FROM a
WHERE a.Title LIKE '%' + ISNULL(@Title, '') + '%'
于 2015-07-17T05:40:10.000 回答