有时候,文章关键词里有 词1,词2这样格式的关键词,通过关键词来查询其相关的文章,我们可以通过以存储过程方式来实现。

示例如下:
------------------------------------
--用途:相关信息选择
------------------------------------
CREATE PROCEDURE UP_News_GetRelated
@TypeId int, --文章分类标识
@KeyAll varchar(1000) --关键词集合
AS
DECLARE @FirstKey varchar(225),@OtherKey varchar(500),@StrKey varchar(500),@NumberKey int
IF @KeyAll<>''
BEGIN
IF charindex(',',@KeyAll) > 0
BEGIN
SET @OtherKey=@KeyAll
SET @NumberKey=100
SET @StrKey=''
WHILE @NumberKey >= 0
BEGIN
IF @NumberKey<>0
BEGIN
SET @FirstKey=substring(@OtherKey,1,charindex(',',@OtherKey)-1)
SET @OtherKey=substring(@OtherKey,len(@FirstKey)+2,len(@OtherKey))
END
ELSE
SET @FirstKey=@OtherKey
IF @NumberKey<>100
SET @StrKey=@StrKey+' or KeyWord like ''%'+@FirstKey+'%'' '
ELSE
SET @StrKey=@StrKey+' ''%'+@FirstKey+'%'' '
IF @NumberKey<>0
SET @NumberKey=charindex(',',@OtherKey)
ELSE
SET @NumberKey=-1
END --得到关键字个数为N
exec('select top 6 Title,[Html],WebName from VI_News where KeyWord like '+@StrKey+' order by Id desc')
END
ELSE --得到关键字个数为1
select top 6 Title,[Html],WebName from VI_News where KeyWord like '%'+@KeyAll+'%' order by Id desc
END
ELSE --得到关键字个数为0
select top 6 Title,[Html],WebName from VI_News where TypeId = @TypeId order by Id desc
GO
附:charindex 语法
CHARINDEX ( expression1 , expression2 [ , start_location ] )
参数
expression1
一个表达式,其中包含要寻找的字符的次序。expression1 是一个短字符数据类型分类的表达式。
expression2
一个表达式,通常是一个用于搜索指定序列的列。expression2 属于字符串数据类型分类。
start_location
在 expression2 中搜索 expression1 时的起始字符位置。如果没有给定 start_location,而是一个负数或零,则将从 expression2 的起始位置开始搜索。
返回类型
int
注释
如果 expression1 或 expression2 之一属于 Unicode 数据类型(nvarchar 或 nchar)而另一个不属于,则将另一个转换为 Unicode 数据类型。
如果 expression1 或 expression2 之一为 NULL 值,则当数据库兼容级别为 70 或更大时,CHARINDEX 返回 NULL 值。当数据库兼容级别为 65 或更小时,CHARINDEX 仅在 expression1 和 expression2 都为 NULL 时返回 NULL 值。
如果在 expression2 内没有找到 expression1,则 CHARINDEX 返回 0。
功能:返回字符、二进制、文本或图像表达式的一部分
语法:SUBSTRING ( expression, start, length )
SQL 中的 substring 函数是用来抓出一个栏位资料中的其中一部分。这个函数的名称在不同的资料库中不完全一样:
MySQL: SUBSTR(), SUBSTRING()
Oracle: SUBSTR()
SQL Server: SUBSTRING()
参数:
expression 字符串、二进制字符串、文本、图像、列或包含列的表达式。请勿使用包含聚合函数的表达式。
start 整数或可以隐式转换为 int 的表达式,指定子字符串的开始位置。
- length 整数或可以隐式转换为 int 的表达式,指定子字符串的长度。
- 返回值:
-
如果 expression 是一种支持的字符数据类型,则返回字符数据。如果 expression 是一种支持的二进制数据类型,则返回二进制数据。如果 start = 1,则子字符串从表达式的第一个字符开始。
返回字符串的类型与给定表达式的类型相同(下表所示内容除外)。
给定表达式 返回类型 image
varbinary
ntext
nvarchar
- 代码示例:
下面的示例返回 Employees 表中每位雇员的名字首字母及完整姓氏:
SELECT SUBSTRING(First Name,1,1) AS Initial, Last Name
FROM Employees
下面是结果集:
Initial..........Last Name
-------------------------
A................Funk
M................Pearson
L................Calafato
N................Danner
J................Lee
S................Byham
M................Sutter
R................King
A................Doyle