字符串處理(按指定的關鍵字在字段中出現的次數排序)

本文介绍了一种利用SQL函数来实现关键字搜索并按匹配度排序的方法,通过创建特定的测试数据表和自定义函数,实现了对多关键字查询的支持,并展示了查询结果。

搜索关键字,按空格分开,结果要按精确度从高到低显示,比如:
查找的关键字---> ASP JAVA PHP FLEX
数据库记录集--->

ID CONTENT
1 JAVA是面对对象的语言
2 PHP学起来比JAVA要容易点
3 ASP比PHP用起来简单,PHP比JAVA用起来简单
4 FLEX做出来的界面好漂亮,而且可以和ASP,PHP,JAVA结合使用
5 ASP,PHP用来做网页都不错

那么搜索的结果排序应该是
ID
4 -->出现了4个关键字
3 -->出现了3个关键字
2 -->出现了2个关键字
5 -->出现了2个关键字
1 -->出现了1个关键字

/*---------------------------------
-- Author : htl258(Tony)
-- Date : 2009-09-14 09:59:47
-- Version: Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86)
Mar 29 2009 10:27:29
Copyright (c) 1988-2008 Microsoft Corporation
Enterprise Evaluation Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)

---------------------------------*/
--> 生成测试数据表:tb

IF NOT OBJECT_ID('[tb]') IS NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb]([ID] INT,[CONTENT] NVARCHAR(40))
INSERT [tb]
SELECT 1,N'JAVA是面对对象的语言' UNION ALL
SELECT 2,N'PHP学起来比JAVA要容易点' UNION ALL
SELECT 3,N'ASP比PHP用起来简单,PHP比JAVA用起来简单' UNION ALL
SELECT 4,N'FLEX做出来的界面好漂亮,而且可以和ASP,PHP,JAVA结合使用' UNION ALL
SELECT 5,N'ASP,PHP用来做网页都不错'
GO
--SELECT * FROM [tb]

-->SQL查询如下:
--

IF NOT OBJECT_ID('[fn_px]') IS NULL
DROP FUNCTION [fn_px]
GO
CREATE FUNCTION fn_px(@CONTENT NVARCHAR(100),@str NVARCHAR(100))
RETURNS INT
AS
BEGIN
DECLARE @t TABLE(col NVARCHAR(50))
DECLARE @r int
SET @str=RTRIM(LTRIM(@str))+CHAR(32)
WHILE LEN(@str)>0
BEGIN
INSERT @t SELECT LEFT(@str,CHARINDEX(CHAR(32),@str)-1)
SET @str=STUFF(@str,1,CHARINDEX(CHAR(32),@str),'')
END
SELECT @r=SUM(CASE WHEN CHARINDEX(col,@CONTENT)>0 THEN 1 ELSE 0 END) FROM @t
RETURN @r
END
GO
--调用函数查询如下:
DECLARE @str NVARCHAR(100)
SET @str='ASP JAVA PHP FLEX '
SELECT * FROM tb ORDER BY dbo.fn_px(CONTENT,@str) DESC,ID
--结果:
/*
ID CONTENT
----------- ----------------------------------------
4 FLEX做出来的界面好漂亮,而且可以和ASP,PHP,JAVA结合使用
3 ASP比PHP用起来简单,PHP比JAVA用起来简单
2 PHP学起来比JAVA要容易点
5 ASP,PHP用来做网页都不错
1 JAVA是面对对象的语言

(5 行受影响)
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值