Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查询具有like的字符串列表_Sql_Sql Server - Fatal编程技术网

Sql 查询具有like的字符串列表

Sql 查询具有like的字符串列表,sql,sql-server,Sql,Sql Server,我有一个带有一些列的表Document,例如DocumentTitle。看起来像这样: 文件 Id(唯一标识符) 文件标题(varchar(200)) 在我的应用程序中,输入搜索的字符串,如“发票4711”。现在,我的申请将搜索标题中包含这两个词的所有文件。 因此,将找不到标题为foo4711.pdf,invoice\u bar.pdf的文档。 应找到标题为invoce 4711.pdf或test4711invoce.png的文件 由于我是在一个过程中编写的,所以无法为SearchStr

我有一个带有一些列的表
Document
,例如
DocumentTitle
。看起来像这样:


文件

  • Id(唯一标识符)
  • 文件标题(varchar(200))

在我的应用程序中,输入搜索的字符串,如“发票4711”。现在,我的申请将搜索标题中包含这两个词的所有文件。 因此,将找不到标题为
foo4711.pdf
invoice\u bar.pdf
的文档。 应找到标题为
invoce 4711.pdf
test4711invoce.png
的文件

由于我是在一个过程中编写的,所以无法为SearchString设置固定参数计数。我得到了一个参数,例如,
invoice 4711
,我的split方法返回一个包含所有项的表,如(是的,带符号%)


项目

%4711%

%发票%


所以,当我现在尝试获取两个值都匹配的所有文档时,我得到了一个错误的结果(但是,是的,它总是有意义的: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
);


这两个查询都会返回包含其中任何一个单词的结果,而不是同时包含这两个单词。 你知道这是什么问题吗?或者查询如何正确运行?

计算它们

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;

首先是数据结构,以便为项目提供适当的连接表。您好,您需要搜索的是:%4711%invoice%和%invoice%4711%,因此您必须在“scrumbler”函数中修改拆分函数。您应该尝试类似于从fn_拆分(“发票4711”,“发票4711”,“fn_拆分”(“发票4711”,“发票4711”)中选择项目+“%”的方法,其中a.items b.items for xml path(“”)@gigigis如果“发票4711 John Smith Texas”?@Serg:“发票4711 John Smith Texas”与发票%4711%匹配,但与“发票4711”不匹配??
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;