SQL语句实现按关健字模糊查询,并按匹配度排序
2007-10-19 22:20
731 查看
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 '%[中国人]%' 即可.
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 '%[中国人]%' 即可.
相关文章推荐
- SQL语句实现按关健字模糊查询,并按匹配度排序
- SQL语句实现按关健字模糊查询,并按匹配度排序
- 实现按关健字模糊查询,并按匹配度排序的SQL语句
- asp下实现多条件模糊查询SQL语句
- SQL语句实现模糊查询
- SQL语句实现模糊查询
- 实现多条件模糊查询SQL语句
- MySQL中根据if标签实现多条件模糊查询(动态SQL语句)
- 关于SQL查询语句的模糊查询,排序用法,limit用法的介绍
- Linq排序、分组、模糊查询、调用外部方法、直接执行SQL语句、事务、修改数据
- mysql 多表关联查询 实现 全文匹配的 模糊搜索接口 SQL
- asp下实现多条件模糊查询SQL语句
- oracle SQL语句练习MERGE、模糊查询、排序、
- Excel 中使用SQL 语句查询数据(七)-----用LIKE 运算符进行模糊匹配查询
- SQL语句实现模糊查询
- 实现多条件模糊查询SQL语句
- 当只有一个输入条件的时匹配数据库表中多个字段模糊查询的SQL语句
- SQL语句实现日期时间模糊查询
- SQL中LIKE模糊查询LIKE关键字匹配语句