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 服务器中的逻辑运算符求值。