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

搜索关键字,按空格分开,结果要按精确度从高到低显示,比如:
查找的关键字---> 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 行受影响)
*/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值