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

所属分类: 数据库 / MsSql 阅读数: 370
收藏 0 赞 0 分享
复制代码 代码如下:

IF OBJECT_ID('TB')IS NOT NULL DROP TABLE TB
GO
CREATE TABLE tb (ID INT IDENTITY(1,1),VALUE NVARCHAR(100))
INSERT tb SELECT N'中国'
UNION ALL SELECT N'中国人'
UNION ALL SELECT N'中国人民'
UNION ALL SELECT N'日本'
UNION ALL SELECT N'日本人'
UNION ALL SELECT N'我的心中有人姑娘'
UNION ALL SELECT N'人民网'
UNION ALL SELECT N'中国是个伟大的国家'
UNION ALL SELECT N'我们都是中国人,都是炎黄子孙,都是龙人传人'
IF OBJECT_ID('fn_SplitStringToROWS')IS NOT NULL DROP FUNCTION fn_SplitStringToROWS
GO
CREATE FUNCTION fn_SplitStringToROWS
(
@str NVARCHAR(100)
)
RETURNS @t TABLE(v NVARCHAR(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
GO
SELECT * FROM DBO.fn_SplitStringToROWS(N'中国人')
DECLARE @searchSTR NVARCHAR(20)
SET @searchSTR=N'中国人'
SELECT ID,[VALUE] FROM tb a
INNER JOIN fn_SplitStringToROWS(@searchSTR) b
ON CHARINDEX(b.v,a.VALUE)>0
WHERE VALUE LIKE N'%[中国人]%'
GROUP BY ID,VALUE
ORDER BY COUNT(DISTINCT v) DESC
DROP TABLE tb

/*
v
----




(3 個資料列受到影響)

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

(8 個資料列受到影響)
*/
更多精彩内容其他人还在看

如何远程连接SQL Server数据库图文教程

如何远程连接SQL Server数据库图文教程
收藏 0 赞 0 分享

一个SQL语句获得某人参与的帖子及在该帖得分总和

一个SQL语句获得某人参与的帖子及在该帖得分总和
收藏 0 赞 0 分享

通用分页存储过程,源码共享,大家共同完善

通用分页存储过程,源码共享,大家共同完善
收藏 0 赞 0 分享

SQL查找某一条记录的方法

SQL查找某一条记录的方法
收藏 0 赞 0 分享

使用 GUID 值来作为数据库行标识讲解

使用 GUID 值来作为数据库行标识讲解
收藏 0 赞 0 分享

非常详细的SQL--JOIN之完全用法

非常详细的SQL--JOIN之完全用法
收藏 0 赞 0 分享

收缩后对数据库的使用有影响吗?

收缩后对数据库的使用有影响吗?
收藏 0 赞 0 分享

mssql server 存储过程里,bulk insert table from '路径+文件',路径固定,文件名不固定的实现方法

mssql server 存储过程里,bulk insert table from '路径+文件',路径固定,文件名不固定的实现方法
收藏 0 赞 0 分享

请问在mssql“SQL事件探查器”里表格的标题,如CPU,Read,Write,Duration,SPID.........的解释

请问在mssql“SQL事件探查器”里表格的标题,如CPU,Read,Write,Duration,SPID.........的解释
收藏 0 赞 0 分享

SQL Server 2000的安全配置

SQL Server 2000的安全配置
收藏 0 赞 0 分享
查看更多