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;