zoukankan      html  css  js  c++  java
  • 通过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


     

  • 相关阅读:
    verilog BRAM 读写
    verilog 语法一 led 翻转
    面试 遇到 问题
    S32K144+UJA1169 (四 ) S32K144 SPI1 功能初始化
    S32K144+UJA1169 ( 三 ) S32K144 SPI1 功能初始化
    S32K144+UJA1169 ( 二 ) S32K144 SPI1 对应的引脚 初始化 为 SPI 功能
    S32K144+UJA1169 ( 一 ) 连接框架+1169 功能 说明
    编译 xboot
    make clean make[1]:sdl2-config:命令未找到
    lwip 内存配置和使用,以及 如何 计算 lwip 使用了多少内存?
  • 原文地址:https://www.cnblogs.com/fogwang/p/2666585.html
Copyright © 2011-2022 走看看