通过charindex和substring类似于keyword的查询

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

通过charindex和substring类似于keyword的查询 - jopwu - 相信自己,一切都会好的

 

示例如下:

------------------------------------
--用途:相关信息选择
------------------------------------
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


 

posted @ 2012-04-26 10:13  fogwu  阅读(192)  评论(0编辑  收藏  举报