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

找关键字的SQL查询,有点难度
我在数据库里有


表:class

字段:
id    qy

 1    广州双一乳胶

 2    湖南金博科技有限责任公司



现在需求是:

当我输入“广州广橡集团有限公司双一乳胶厂”时能在SQL里查询到“广州双一乳胶”

当我输入“湖南科技”  能在SQL里查询到“湖南金博科技有限责任公司”


不知道我说明白没有
------解决方案--------------------
明白是明白了,这个确实不简单,涉及分词技术。
------解决方案--------------------
分词,不好做
------解决方案--------------------
这里有个例子,看看:http://blog.sina.com.cn/s/blog_477cf8ad010007kj.html
------解决方案--------------------
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 行)

*/

------解决方案--------------------
IF @Step<>0 AND @Step>=len(@min)/2
        SET @r=1
    RETURN @r

如果在比较长的字符串里找到含有短的字符串中一半的字符个数,就表示可以匹配

lz可以严格点
IF  @Step=len(@min)-- 干脆找出全部包含的
        SET @r=1
    RETURN @r