日期:2014-05-17  浏览次数:20646 次

SQL 如何最大限度匹配搜索值
SQL 列上有字符串
一般使用SELECT * FROM XXX WHERE CCC LIKE '%BBB%'
搜索,如果:字符串为‘香港观光一天’,搜“香港”可以搜到,但客户搜索“香港一天”这种
搜索,上面是无法处理的。
如何解决?搜索‘香港一天’ 也能把列中包含字符串‘香港一天’ 的‘香港观光一天’
作为符合搜索结果列出来?
SQL??搜索?匹配

------解决方案--------------------
create function [dbo].[m_fuzzyquery_v1]
(
    @str nvarchar(2000)
)  
returns nvarchar(2000)
as  
begin  
       declare @count int,@i int;
       declare @newchar nvarchar(200),@nn nvarchar(300),@hh nvarchar(200)
       set @count=len(@str);set @i=1;set @nn='';
       while @i<@count+1
       begin
           set @newchar=substring(@str,@i,1)+'%'
           set @nn=@nn+@newchar;
           set @i=@i+1;
       END
    set @hh='%'+@nn
    return @hh
end


declare @table table (connect varchar(30))
insert into @table
select '香港观光一天'

select * from @table where connect like ( select dbo.[m_fuzzyquery_v1]('香港一天'))

/*
connect
------------------------------
香港观光一天
*/

------解决方案--------------------
引用:
create function [dbo].[m_fuzzyquery_v1]
(
    @str nvarchar(2000)
)  
returns nvarchar(2000)
as  
begin  
       declare @count int,@i int;
       declare @newchar nvarchar(200),@nn nvarchar(300),@hh nvarchar(200)
       set @count=len(@str);set @i=1;set @nn='';
       while @i<@count+1
       begin
           set @newchar=substring(@str,@i,1)+'%'
           set @nn=@nn+@newchar;
           set @i=@i+1;
       END
    set @hh='%'+@nn
    return @hh
end


declare @table table (connect varchar(30))
insert into @table
select '香港观光一天'

select * from @table where connect like ( select dbo.[m_fuzzyquery_v1]('香港一天'))

/*
connect
------------------------------
香港观光