Sql server 如果表1中的一行为“NickClarkNick”(无空格),则会显示与未选值不匹配的所有记录。如果表1中的一行为“NickClarkNick”(无空格),您希望匹配吗?任何数目的Nick或Clark都可以。。。但尼克和克拉克都应该在场。。。带空格还是不带空

Sql server 如果表1中的一行为“NickClarkNick”(无空格),则会显示与未选值不匹配的所有记录。如果表1中的一行为“NickClarkNick”(无空格),您希望匹配吗?任何数目的Nick或Clark都可以。。。但尼克和克拉克都应该在场。。。带空格还是不带空,sql-server,database,contains,Sql Server,Database,Contains,如果表1中的一行为“NickClarkNick”(无空格),则会显示与未选值不匹配的所有记录。如果表1中的一行为“NickClarkNick”(无空格),您希望匹配吗?任何数目的Nick或Clark都可以。。。但尼克和克拉克都应该在场。。。带空格还是不带空格..如果表1上的一行是“NickClarkKnick”(无空格),你会期望匹配吗?Nick或Clark的任何数量都可以。。。但尼克和克拉克都应该在场。。。有或没有空格…哇。。。它是有效的。。。我刚刚用值(排列和组合)进行了测试。。但要理解逻辑


如果表1中的一行为“NickClarkNick”(无空格),则会显示与未选值不匹配的所有记录。

如果表1中的一行为“NickClarkNick”(无空格),您希望匹配吗?任何数目的Nick或Clark都可以。。。但尼克和克拉克都应该在场。。。带空格还是不带空格..如果表1上的一行是“NickClarkKnick”(无空格),你会期望匹配吗?Nick或Clark的任何数量都可以。。。但尼克和克拉克都应该在场。。。有或没有空格…哇。。。它是有效的。。。我刚刚用值(排列和组合)进行了测试。。但要理解逻辑。。。谢谢你的解决方案…现在明白逻辑了。。。根据我的理解,将CTE重命名为“SNo_Gen”、“Search_Str_Splitter”和“Not_Exists”(自上而下)。。。。再次感谢。哇。。。它是有效的。。。我刚刚用值(排列和组合)进行了测试。。但要理解逻辑。。。谢谢你的解决方案…现在明白逻辑了。。。根据我的理解,将CTE重命名为“SNo_Gen”、“Search_Str_Splitter”和“Not_Exists”(自上而下)。。。。再次感谢。
1,'bla1 bla2 bla3 String1 bla4 bla5 bla6 String2 bla7 bla8 bla9'
2,'bla3 String1 bla4 String2 bla7 bla8 bla1'
3,'bla3 String2 bla4 String3'
1,bla1
2,string1
3,bla3
1,string2
2,bla5
3,bla1
4,bla4
declare @str nvarchar(100) = ' Dr clark Nick '
DECLARE @Tab TABLE(Col NVARCHAR(50))
INSERT INTO @Tab
SELECT ' Dr. Nick Clark' UNION ALL
SELECT ' Dr. Nick SPACE Clark' UNION ALL
SELECT ' Dr. Clark SPACE Nick' UNION ALL
SELECT ' Dr. Clark Nick' UNION ALL
SELECT ' Dr. Nick' UNION ALL
SELECT ' Dr. Clark '

declare @str nvarchar(100) = '  Nick clark '

set @str = ltrim(rtrim(@str))

DECLARE @Search1 VARCHAR(MAX), @Search2 VARCHAR(MAX) 

declare @t table(sno int, splitdata nvarchar(100))
insert into @t
SELECT 
    row_number() over (order by ltrim(rtrim(o.splitdata))) as sno,
    ltrim(rtrim(o.splitdata)) AS splitdata
FROM
    (SELECT CAST('<X>'+REPLACE(@str,' ','</X><X>')+'</X>' AS XML) AS Filter)F1
     CROSS APPLY
          ( SELECT fdata.D.value('.','varchar(MAX)') AS splitdata 
          FROM f1.Filter.nodes('X') AS fdata(D)
    ) O

SELECT @Search1 = COALESCE(@Search1 + '%', '') + Splitdata FROM @t order by sno
SELECT @Search2 = COALESCE(@Search2 + '%', '') + Splitdata FROM @t order by sno desc

select * from @tab where col like '%'+@Search1+'%' or col like '%'+@Search2+'%'
set nocount on;

declare @Tab table (col nvarchar(50));

insert @Tab (Col)
values (' Dr. Nick Clark')
     , (' Dr. Nick SPACE Clark')
     , (' Dr. Clark SPACE Nick')
     , (' Dr. Clark Nick')
     , (' Dr. Nick')
     , (' Dr. Clark ');

declare @str nvarchar(100) = '  Nick clark ';
set @str = ' ' + ltrim(rtrim(@str)) + ' ';

with Tally
as (
    select row_number() over (order by t1.column_id) as 'N'
      from sys.columns t1
      join sys.columns t2
        on 1=1
   )
, Needles
as (
    select substring(@str,N+1,charindex(' ',@str,N+1)-N-1) 'Needle'
      from Tally
     where N < len(@str)
       and substring(@str,N,1) = ' '
   )
, NotSelected
as (
    select tab.col
      from @tab tab
      join Needles
        on 1=1
     where charindex(Needles.Needle,tab.col) = 0
   )
   select Tab.Col
     from @Tab Tab
left join NotSelected
       on NotSelected.Col = Tab.Col
    where NotSelected.Col is null;