我的表格Document
包含一些列,例如DocumentTitle
。看起来像这样:
文档
在我的应用程序中输入您搜索的字符串,如#34;发票4711"。现在,我的申请应搜索标题中包含这两个词的所有文件。
因此,找不到标题为foo4711.pdf
,invoice_bar.pdf
的文档。
应找到标题为invoce 4711.pdf
或test4711invoce.png
的文档。
由于我在一个程序中写这个,我不能为搜索字符串设置一个修复参数计数。我得到一个参数,例如invoice 4711
和我的split-method返回一个包含所有项目的表(和是的,使用%-signs)
项目
%4711%
%发票%
Sooo当我现在尝试获取所有这些值匹配的所有文档时,我得到了错误的结果(但是,是的,这总是有意义的:D)
info :fn_split-函数将searchstring作为第一个参数,第二个参数是切片符号
select *
from document
WHERE 1 = (
select case
when document.documenttitle like items then 1 else 0 end
from fn_split('invoice 4711', ' ')
where document.documenttitle like items
);
select *
from document
inner join fn_split('invoice 4711', ' ')
on document.DocumentTitle like items
这两个查询都返回包含任何这些单词的结果 - 而不是两者。 知道这里的问题是什么吗?或查询如何正常工作?
答案 0 :(得分:2)
统计他们。
declare @arg varchar(100) ='invoice 4711';
select *
from document
cross apply (
select n=count(*) from fn_split(@arg, ' ') x where
document.DocumentTitle like x.items) cnt
where (select count(*) from fn_split(@arg, ' ')) = cnt.n;