日期:2014-05-18  浏览次数:20504 次

t-sql 难题 求高手
表topoic
字段
id                   title
1                   2010上海世博会
2                     上面那棵树
3                     面朝大海,春暖花开
3                     春暖花开


现在模糊查询表topic     select   *   From   topic   where   title   like   '%上海% '得到的结果是
id                   title
1                   2010上海世博会

现在我需要根据模糊查询的字一个一个的匹配,比如查询“上海花”则在列表中搜索title为“上”   或者“海”或者“花”的记录     结果为:
id                   title
1                   2010上海世博会
2                     上面那棵树
3                     面朝大海,春暖花开
3                     春暖花开

求高手!

------解决方案--------------------
SQL code
 select   *   From   topic   where   title   like   '%上%海%花% '

------解决方案--------------------
select * From topic where title like '%上% ' or title like '%海%' or title like '%花%'
------解决方案--------------------
#2
+1
------解决方案--------------------
顶#1,忽视#2
------解决方案--------------------
不要用like,用patindex试试
select ...from topic where patindex('%[上],[海],[花]%',title)>0
------解决方案--------------------
select * from topic where title like '%上海%' or title like '%花%';
------解决方案--------------------
网速太慢。。。无语。。。
------解决方案--------------------
SQL code
类似于分词?
CREATE TABLE atest(id INT,   qy varchar(100))
INSERT atest select 1    ,'广州双一乳胶'
UNION ALL SELECT  2    ,'湖南金博科技有限责任公司'
GO 
CREATE FUNCTION GetSS(@p varchar(100),@q varchar(100))
RETURNS BIT 
AS
BEGIN
    DECLARE @min varchar(100),@max varchar(100)
    DECLARE @I INT,@Step INT 
    DECLARE @r BIT 
    SET @r=0
    
    SELECT @I=1,@Step=0 
    IF len(@p)<len(@q) 
        SELECT @max=@q,@min=@p
    ELSE 
        SELECT @max=@p,@min=@q
    
    WHILE @I<=len(@min)
    BEGIN
        IF charindex(substring(@min,@I,1),@max)>0
            SET @Step=@Step+1
        SET @I=@I+1
    END
    IF @Step<>0 AND @Step>=len(@min)/2
        SET @r=1
    RETURN @r 
END
GO 
DECLARE @a varchar(100)
SET @a='湖南科技'
SELECT * FROM atest WHERE dbo.getss(@a,qy)=1
SET @a='广州广橡集团有限公司双一乳胶厂'
SELECT * FROM atest WHERE dbo.getss(@a,qy)=1

--result
/*id          qy                             
----------- ------------------------------ 
2           湖南金博科技有限责任公司

(所影响的行数为 1 行)

id          qy                             
----------- ------------------------------ 
1           广州双一乳胶

(所影响的行数为 1 行)

*/