将 SQL “Like” 与变量一起使用

Using SQL "Like" with a variable

提问人:richieb 提问时间:8/2/2023 最后编辑:marc_srichieb 更新时间:8/2/2023 访问量:41

问:

我正在尝试将变量添加到SQL中选择的一部分。但是,这似乎失败了。

set @search = '''%fishing%'' OR book_text like ''%seaside%'' AND book_text like  ''%docks%'''

print @search

select * 
from constituency 
where book_text like @search

select * 
from constituency 
where book_text like '%fishing%' 
   or book_text like '%seaside%' 
  and book_text like '%docks%'

使用变量的第一次选择不会返回任何行,但是,第二次手动搜索会返回变量打印显示的正确行数@search@search

'%fishing%' or book_text like '%seaside%' and book_text like  '%docks%'
SQL 变量

评论

2赞 user2773289 8/2/2023
我认为您可能需要使用动态sql在运行时构建查询。现在,如果您直接放入 where 子句,则 search 参数被视为要匹配的字符串。因此,第一个查询如下所示:select * from 选区,其中book_text如“%fishing%”或book_text如“%seaside%”和book_text如“%docks%”,book_text与“%fishing%”或book_text如“%seaside%”和book_text如“%docks%”进行比较”
1赞 Stu 8/2/2023
你的语法是特定于产品的,你应该标记你的RDBMS。如果您真的有值为“%fishing%”或“%seaside%”book_text book_text,book_text像“%docks%”之类的,我会感到惊讶,因为这就是您要找的。

答:

0赞 Milon Sarker 8/2/2023 #1

需要动态 SQL。我已经在SQL Server中测试了以下代码片段。它有效。

begin
declare @search varchar(max);
declare @query_str varchar(max);
set @search = '''%fishing%'' OR book_text like ''%seaside%'' AND book_text like  ''%docks%'''

select @query_str = 'select * 
from constituency 
where book_text like' + @search;

exec(@query_str);

end;