如何在 SQL 中编写以下语句。
它给了我类似的错误。
select * from a
where
a.Title = case when @Title is null or @Title = '' then a.Title else like %@Title% end
如何在 SQL 中编写以下语句。
它给了我类似的错误。
select * from a
where
a.Title = case when @Title is null or @Title = '' then a.Title else like %@Title% end
这可以通过以下方式完成:
select * from a
where ISNULL(@Title, '') = '' or a.Title like '%' + @Title + '%'
语法错误是因为您使用的 %LIKE% 不是有效的构造。要获得所需的结果,您可以根据条件运行两个不同的查询,如下所示:
if (@Title = null or @Title = '')
select * from a where a.Title = a.Title
else
select * from a where title like @Title
这只会处理空值,但也许有人可以修改它来处理你的空 char/varchar 值......
SELECT *
FROM a
WHERE a.Title = COALESCE(@Title, a.Title)
根据您对过滤条件的评论,这应该是您所追求的:
select * from a
where @Title is null or @Title = '' or a.Title like %@Title%
你不能像那样混合你的运算符(= 和 like)。看起来您正在尝试构建一个显示“like %Title%”的字符串,但您不能这样做。Case 将简单地返回一个值以与某物(a.title)进行比较。正如其他几个人所说,您需要在两个测试之间使用 OR。
尝试这个 :
select
*
from @a a
where
a.Title = case when (@Title is null or @Title = '') then a.Title else @Title end
只需将运算符更改为,因为输出LIKE
之间没有区别a.title = a.title
a.title like a.title
select *
from a
where a.Title like case when @Title is null or @Title = '' then a.Title else %@Title% end
您可以使用@Giorgi Nakeuri 的答案,但为了澄清:
在您的查询中有一些错误:
%@Title%
after LIKE
that 是一个无效的表达式,您需要在LIKE
like之后使用字符文字LIKE '%' + @Title + '%'
。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, '') + '%'