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