我想检查给定文本中是否所有给定的单词片段都以任何顺序存在。
这些片段由 Web 应用程序用户在单个字符串中提供,由空格分隔,例如'abc xyz kj'。它们存在于'mn kj qabc pc xyzw'中,但不存在于'mn kj qabc pc xyw'中。
我编写了以下有效的函数,但它看起来很复杂,所以我一定做错了。关于不同方法或如何使其执行的任何想法?
顺便说一句,数据库对我来说是只读的,所以我不能对其进行全文索引,所有者也不会这样做。
create function dbo.tem_fragmentos(
@texto varchar(max),
@fragmentos varchar(max)
)
returns bit as
begin
declare
@inicio integer = 1,
@fim integer,
@fragmento varchar(max);
set @fragmentos = ltrim(rtrim(@fragmentos));
while charindex(' ', @fragmentos) > 0
set @fragmentos = replace(@fragmentos, ' ', ' ');
while @inicio <= len(@fragmentos) begin
set @fim = charindex(' ', @fragmentos, @inicio + 1);
if @fim = 0 set @fim = len(@fragmentos) + 1;
set @fragmento = substring(@fragmentos, @inicio, @fim - @inicio);
if charindex(@fragmento, @texto) = 0 return 0;
set @inicio = @fim + 1;
end -- while
return 1;
end;
select dbo.tem_fragmentos('clodoaldo pinto neto', ' clo cl nto pinto');