Sql where 子句,如果值为空或 null 则获取全部,否则使用 like 语句
Sql where clause, Get All if value is empty or null else use like statement
我有专栏
-类别
红色
蓝色的
黄色
我想呈现一个条件语句。如果 Title 为 null,则获取所有,否则 title 如@Title.
SELECT [Category]
FROM [dbo].[Records]
WHERE
CASE WHEN @SearchText IS NULL
THEN title = title
ELSE (Title like '%' + @SearchText + '%')
END
结果应该是这样的
如果@Title 为 null 或空
return 所有值
红色
蓝色的
黄色
否则标题如“%red%”
return红色
这是我能想到的最好的了
and (
(@SearchText IS NULL and title = title)
or
(@SearchText IS not NULL and Title like '%' + @SearchText + '%')
)
您的代码可以更新为:
SELECT [Category]
FROM [dbo].[Records]
WHERE (@SearchText IS NULL OR (Title like '%' + ISNULL( @SearchText ,'')+ '%'))
如果你喂 null
那么第一个条件将是 true
否则第二个。
尝试这样的事情:
SELECT [Category]
FROM [dbo].[Records]
WHERE ISNULL(@SearchText, '') = '' OR Title like '%' + @SearchText + '%'
但我认为
SELECT [Category]
FROM [dbo].[Records]
WHERE Title like CONCAT('%', @SearchText, '%')
可能有效。
另请参阅 How does SQL Server evaluate logical expressions? 以了解 sql 服务器中的逻辑运算符求值。
我有专栏
-类别
红色 蓝色的 黄色
我想呈现一个条件语句。如果 Title 为 null,则获取所有,否则 title 如@Title.
SELECT [Category]
FROM [dbo].[Records]
WHERE
CASE WHEN @SearchText IS NULL
THEN title = title
ELSE (Title like '%' + @SearchText + '%')
END
结果应该是这样的
如果@Title 为 null 或空
return 所有值
红色 蓝色的 黄色
否则标题如“%red%” return红色
这是我能想到的最好的了
and (
(@SearchText IS NULL and title = title)
or
(@SearchText IS not NULL and Title like '%' + @SearchText + '%')
)
您的代码可以更新为:
SELECT [Category]
FROM [dbo].[Records]
WHERE (@SearchText IS NULL OR (Title like '%' + ISNULL( @SearchText ,'')+ '%'))
如果你喂 null
那么第一个条件将是 true
否则第二个。
尝试这样的事情:
SELECT [Category]
FROM [dbo].[Records]
WHERE ISNULL(@SearchText, '') = '' OR Title like '%' + @SearchText + '%'
但我认为
SELECT [Category]
FROM [dbo].[Records]
WHERE Title like CONCAT('%', @SearchText, '%')
可能有效。
另请参阅 How does SQL Server evaluate logical expressions? 以了解 sql 服务器中的逻辑运算符求值。