SQL语句实现按关健字模糊查询 并按匹配度排序

                  CREATE TABLE tb (ID INT IDENTITY ( 1 , 1 ),VALUE VARCHAR ( 100 ))
INSERT tb SELECT ' 中国 '
UNION ALL SELECT ' 中国人 '
UNION ALL SELECT ' 中国人民 '
UNION ALL SELECT ' 日本 '
UNION ALL SELECT ' 日本人 '
UNION ALL SELECT ' 我的心中有人姑娘 '
UNION ALL SELECT ' 人民网 '
UNION ALL SELECT ' 中国是个伟大的国家 '
UNION ALL SELECT ' 我们都是中国人,都是炎黄子孙,都是龙人传人 '

DECLARE @searchSTR VARCHAR ( 20 )
SET @searchSTR = ' 中国人 '
SELECT ID,VALUE FROM tb a
INNER JOIN fn_SplitStringToROWS( @searchSTR ) b
   
ON CHARINDEX (b.v,a.VALUE) > 0
   
WHERE VALUE LIKE ' %[中国人]% '
   
GROUP BY ID,VALUE
   
ORDER BY COUNT ( DISTINCT v) DESC
   
DROP TABLE tb

--附函数
CREATE FUNCTION fn_SplitStringToROWS
(
@str VARCHAR(100)
)
RETURNS @t TABLE(v VARCHAR(2))
AS
BEGIN
   
DECLARE @i INT
   
SET @i=1
   
WHILE @i<=LEN(@str)
       
BEGIN
           
INSERT @t SELECT SUBSTRING(@str,@i,1)
           
SET @i=@i+1
       
END
   
RETURN
END

/*


(所影响的行数为 9 行)

ID          VALUE                                                                                               
----------- ----------------------------------------------------------------------------------------------------
9           我们都是中国人,都是炎黄子孙,都是龙人传人
2           中国人
3           中国人民
8           中国是个伟大的国家
1           中国
6           我的心中有人姑娘
7           人民网
5           日本人

(所影响的行数为 8 行)

*/

如果要实现匹配度排序,那么可以去掉 WHERE ... LIKE那句,多余

如果只想实现模糊的匹配,那么可以不需要连表,直接

SELECT ID,VALUE FROM tb  WHERE VALUE LIKE '%[中国人]%' 即可.

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自blog.csdn.net/hffyyff/article/details/86659107