`
zhangfeilo
  • 浏览: 399808 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

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

阅读更多

今天有人在CSDN上问,我就随手写了一段.

 

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

 

按词匹配.

 

create function f_splitIDX(@SourceSql varchar(8000),@StrSeprate varchar(10))

returns @temp table(id int identity(1,1),v varchar(100))

 

begin

    declare @i int

    set @SourceSql=rtrim(ltrim(@SourceSql))

    set @i=charindex(@StrSeprate,@SourceSql)

    while @i>=1

    begin

        insert @temp values(left(@SourceSql,@i-1))

        set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)

        set @i=charindex(@StrSeprate,@SourceSql)

    end

    if @SourceSql<>'\'

       insert @temp values(@SourceSql)

    return 

end

 

 

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 '人民网'

UNION ALL SELECT '中国是个伟大的国家'

UNION ALL SELECT '我们都是中国人,都是炎黄子孙,都是龙人传人'

 

 

 

 

DECLARE @searchSTR VARCHAR(20)

SET @searchSTR='中国人 中国'

 

SELECT a.ID,VALUE FROM tb a

    INNER JOIN dbo.f_splitIDX(@searchSTR,' ') b

    ON CHARINDEX(v,VALUE)>0

    GROUP BY a.ID,Value

    ORDER BY COUNT(DISTINCT v) DESC,MIN(b.id),a.id

 

DROP TABLE tb

 

分享到:
评论

相关推荐

    sql模糊查询并按匹配度排序

    ### SQL模糊查询并按匹配度排序 在数据库查询操作中,模糊查询是非常常见的一种需求,尤其是在需要处理大量数据且查询条件不确定的情况下。本篇文章将基于提供的SQL查询语句,详细介绍如何进行SQL模糊查询以及如何...

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

    本示例中,我们将探讨如何实现一个按关键词模糊查询,并根据匹配度进行排序的SQL语句。 首先,创建了一个名为`TB`的表,用于存储数据,其结构如下: ```sql CREATE TABLE tb ( ID INT IDENTITY(1,1), VALUE ...

    ssm框架实现模糊查询

    在模糊查询中,我们需要在MyBatis的Mapper XML文件或者Mapper接口中编写SQL语句,利用动态SQL来实现模糊匹配。 4. **动态SQL**:MyBatis的动态SQL功能允许我们在XML映射文件中编写条件语句,如`&lt;if&gt;`、`&lt;choose&gt;`、...

    SQL语句运用技巧

    `:根据条件查询表中的前N条记录,并按指定字段降序排序。 5. **使用IN进行多值匹配** - `SELECT * FROM 表名 WHERE 字段名 IN ('值1', '值2', '值3');`:匹配字段中属于给定值列表的行。 6. **使用BETWEEN进行...

    数据库中的模糊查询技术

    4.2 设计思想:在FoxPro中,SELECT-SQL语句配合LIKE关键字可以实现模糊查询。LIKE关键字允许使用通配符,与标准SQL类似。 4.3 使用举例:例如,`SELECT * FROM Customers WHERE Name LIKE 'John%'` 会返回所有名字以...

    常用的SQL语句.pdf

    当一个SQL语句提交给数据库服务器时,服务器首先会进行整体的语法分析,检查语句的结构是否正确,接着优化SQL语句的执行计划,然后编译并执行。在语法分析阶段,服务器会验证命令、关键字、表名和字段名的正确性。 ...

    ssm模糊查询demo

    在对应的XML配置文件中,编写一个带有LIKE关键字的SQL语句,使用通配符%来实现模糊匹配。 分页查询也是大型系统必备的功能,它可以提高用户体验并减轻服务器负载。在SSM中,可以使用PageHelper或者Mybatis-Plus这样...

    servlet增删改查改进版(增加模糊查询)

    4. **执行查询**:使用JDBC(Java Database Connectivity)API连接数据库并执行SQL语句。需要先加载数据库驱动,建立连接,然后创建Statement或PreparedStatement对象,设置参数并执行查询。 5. **处理结果**:查询...

    Sql经典练习题库(附答案)

    以上练习题覆盖了SQL中的各种核心概念和技术,包括子查询、连接(JOIN)、聚合函数(如COUNT、SUM)、条件语句(如IN、ANY、ALL)等。这些练习有助于加深对SQL的理解,并提高解决实际问题的能力。

    常用SQL语句举例分析.pdf

    而LIKE匹配符则用于实现模糊匹配,其通配字符包括:%匹配任意类型和长度的字符,下划线_匹配单个任意字符,方括号[]则指定一个字符、字符串或范围,要求匹配的对象为其中之一。 SQL提供了多种内置函数,用于统计...

    SQL语句教程

    通过构建实际的数据库环境,尝试各种SQL语句的编写和执行,可以帮助加深对SQL的理解和熟练度。此外,参考各类SQL教程和文档,参与在线课程和社区讨论,也是提升SQL技能的有效途径。 总之,SQL作为数据库领域不可或...

    SQL查询语句的高级应用

    SQL(Structured Query Language)作为数据库管理的核心语言,其查询语句的掌握程度直接影响着数据处理的效率与精确度。从简单的Transact-SQL查询出发,我们深入探讨其高级应用,以期更高效地操作数据库。 ##### ...

    精妙SQL语句,基础,提升,技巧

    - **查询优化**:`LIKE`关键字用于模糊查询,`ORDER BY`用于排序,聚合函数如`COUNT`, `SUM`, `AVG`, `MAX`, `MIN`用于统计分析。 #### 高级查询技术 - **UNION, EXCEPT, INTERSECT** - `UNION`:合并多个查询...

    很实用的50个sql语句

    下面将逐一解析这13个SQL语句所涉及的重要概念和技术。 ### 1. 查询所有学生在某一课程中成绩高于另一门课程成绩的学生信息 此查询使用了子查询与比较操作,通过对比不同课程的成绩,找出特定课程中表现优异的学生...

    javaweb对商品名的模糊查询(附源码)

    在Java Web开发中,模糊查询是一项常见的功能,它允许用户输入部分关键词,系统根据这些关键词在数据库中查找匹配的商品。这种技术广泛应用于电子商务网站,帮助用户快速找到他们想要的商品。本教程将围绕“javaweb...

    Access课件第八课SQL查询[定义].pdf

    例如,要同时显示"90分以上学生情况"和"学生选课成绩"中80分以下的所有记录,可能需要编写复杂的SQL语句来实现这种多条件的筛选。 2. SQL视图: 在Access中,可以通过“设计”视图创建查询,但更复杂的操作需要在...

    SQL Server 2012数据库T-SQL查询方法及实例解析.pdf

    SQL Server数据库查询的最大特点在于其便捷性,几乎所有数据库操作都是基于查询来实现的,因此提高查询的效率对于维护数据库数据至关重要。T-SQL查询语句通常包括以下几个主要方面: 1. 投影(Projection):在T-...

    NotePad++格式化sql文本插件

    3. **关键词高亮**:突出显示SQL语句中的关键字,如SELECT、FROM、WHERE等,提高代码的视觉效果。 4. **注释处理**:可以统一处理多行或单行注释,使其在代码中更加醒目。 5. **排序与整合**:自动对表名和列名进行...

Global site tag (gtag.js) - Google Analytics