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;