如何在SQL中编写以下语句。SQL Case语句在哪里
它给我错误在喜欢。
select * from a
where
a.Title = case when @Title is null or @Title = '' then a.Title else like %@Title% end
如何在SQL中编写以下语句。SQL Case语句在哪里
它给我错误在喜欢。
select * from a
where
a.Title = case when @Title is null or @Title = '' then a.Title else like %@Title% end
这只会处理空值,但也许有人可以修改它来处理你的空CHAR/VARCHAR值,以及...应该是你之后的:
select * from a
where @Title is null or @Title = '' or a.Title like %@Title%
其类似运营商%Title%..请参阅修改后的问题..我赶紧发布了一个错误的问题.. :( – Manish
然后你只需要'或'的条件,并使用一个单独的'like' –
语法错误是因为你正在使用%LIKE%这不是一个有效的构造。为了得到想要的结果,你可以运行基于该条件,而不是两个不同的查询,如下图所示:
if (@Title = null or @Title = '')
select * from a where a.Title = a.Title
else
select * from a where title like @Title
其中的一个条件..还有其他的过滤条件... – Manish
你能发布完整的查询吗? –
不能混淆你的运营商一样,(=和等)。它看起来像你试图建立一个字符串,说'像%标题%',但你不能这样做。大小写只会返回一个值来比较某个事物(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
这是可以做到这样:
select * from a
where ISNULL(@Title, '') = '' or a.Title like '%' + @Title + '%'
您可以使用@Giorgi Nakeuri的答案,但对于clari fying:
在查询中存在一些误区:
%@Title%
后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, '') + '%'
如果'@ Title'是'null'或空,则此导致'a.Title = a.Title'实际上没有意义。 –
其过滤标准,如果我通过标题null,那么它应该忽略标题过滤器 – Manish
@Manish - a.Title = a.Title条件返回Title不为null的所有记录。这是预期的产出吗? –