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 '%[中国人]%' 即可.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值