查询带有like的字符串列表

时间:2016-04-29 12:26:30

标签: sql sql-server

我的表格Document包含一些列,例如DocumentTitle。看起来像这样:

文档

  • Id(uniqueidentifier)
  • DocumentTitle(varchar(200))

在我的应用程序中输入您搜索的字符串,如#34;发票4711"。现在,我的申请应搜索标题中包含这两个词的所有文件。 因此,找不到标题为foo4711.pdfinvoice_bar.pdf的文档。 应找到标题为invoce 4711.pdftest4711invoce.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

这两个查询都返回包含任何这些单词的结果 - 而不是两者。 知道这里的问题是什么吗?或查询如何正常工作?

1 个答案:

答案 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;