zoukankan      html  css  js  c++  java
  • sql server charindex函数和patindex函数详解(转)

    charindex和patindex函数常常用来在一段字符中搜索字符或字符串。假如被搜索的字符中包含有要搜索的字符,那么这两个函数返回一个非零的整数,这个整数是要搜索的字符在被搜索的字符中的开始位数。patindex函数支持使用通配符来进行搜索,然而charindex不支持通配符。接下来,我们逐个分析这两个函数。

    怎样使用charindex函数
           charindex函数返回字符或字符串在另一个字符串中的起始位置。charindex函数调用方法如下:
           charindex ( expression1 , expression2 [ , start_location ] )
           expression1是要到expression2中寻找的字符中,start_location是charindex函数开始在expression2中找expression1的位置。
           charindex函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置。假如charindex没有找到要找的字符串,那么函数整数“0”。让我们看看下面的函数命令执行的结果:
          charindex(sql, microsoft sql server)
          这个函数命令将返回在“microsoft sql server”中“sql”的起始位置,在这个例子中,charindex函数将返回“s”在“microsoft sql server”中的位置11。
    接下来,我们看这个charindex命令:
          charindex(7.0, microsoft sql server 2000)

          在这个例子中,charindex返回零,因为字符串“7.0” 不能在“microsoft sql server”中被找到。

          接下来通过两个例子来看看怎样使用charindex函数来解决实际的t-sql问题。

          第一个例子,假设您要显示northwind数据库customer表前5行联系人列的last name。这是前5行数据
               contactname
               ------------------------------ 
               maria anders
               ana trujillo
               antonio moreno
               thomas hardy
               christina berglund
          您能够看到,customname包含客户的first name和last name,他们之间被一个空格隔开。我用charindx函数确定两个名字中间空格的位置。通过这个方法,我们能够分析contactname列的空格位置,这样我们能够只显示这个列的last name部分。这是显示northwind的customer表前5行last name的记录!
          select top 5 substring(contactname,charindex(‘’ ,contactname)+1 ,len(contactname)) as [last name] from northwind.dbo.customers

          SELECT SUBSTRING('lipasdas lip asdfa',CHARINDEX('lip','lipasdas lip asdfa')+3,2)
    下面是这个命令输出的结果。
               last name
               ------------------------------ 
               anders
               trujillo
               moreno
               hardy
               berglund
          charindex函数找到first name和last name之间的空格,所以substring函数能够分开contactname列,这样就只有last name被选出。我在charindex函数返回的整数上加1,这样last name不是从空格开始。
          在第二个例子中,即如说您要计算记录中,某一个字段包含特定字符的任何记录数。charindex函数能够方便的解决您的问题。计算northwind.dbo.customer表中addresses字段中包含单词road或他的缩写rd的记录数,选择语句类似这样:
           select count(*) from northwind.dbo.customers 

           where charindex(rd,address) > 0 or charindex(road,address)> 1

    怎样使用patindex函数
          patindex函数返回字符或字符串在另一个字符串或表达式中的起始位置,patindex函数支持搜索字符串中使用通配符,这使patindex函数对于变化的搜索字符串很有价值。patindex函数的命令如下:
          patindex ( %pattern% , expression )
          pattern是您要搜索的字符串,expression是被搜索的字符串。一般情况下expression是个表中的一个字段,pattern的前后需要用“%”标记,除非您搜索的字符串在被收缩的字符串的最前面或最后面。
          和charindex函数相同,patindex函数返回搜索字符串在被搜索字符串中的起始位置。假如有这样一个patindex函数:
          patindex(%bc%,abcd)
          这个patindex函数返回的结果是2,这和charindex函数相同。这里的%标记告诉patindex函数去找字符串“bc”,不管被搜索的字符串中在“bc”的前后有多少字符!
          假如您想知道被搜索字符串是否由特定的字符串开始,您能够省去前面的%标记。patinded函数就要这样写:
          patindex(ab%,abcd)
          这个命令执行的结果返回1,表示搜索的字符串“ab”在被搜索的字符串中“abcd”被找到。
          使用通配符能够编辑比我以上举得简单例子复杂得多的搜索字符串。假如说您要确定一个字符串是否包含字母a和z,更有任何数字,这个parindex函数命令可能像这样:
          patindex(%[a,z,0-9]%[a,z,0-9]%[a,z,0-9]%,xyzabc123)
          注意在上面这个例子中的搜索字符部分使用了很多的通陪符。察看sql server联机丛书能够获得更多关于通佩符的信息。接下来,我们用两个例子来看patindex和select怎么联合起来使用。
          假设您想要找出northwind.dbo.categories表中description字段中是包含单词“bread”或“Bread”的任何记录,那么选择语句就可能是这样:
            select description from northwind.dbo.categories
            where patindex(%[b,b]read%,description) > 0
          这里我用通配符来确定大写和小写的“b”。我在notthwind数据库中执行这个脚本后,得到下面的结果:
               description
               --------------------------------------------------------
               desserts, candies, and sweet breads
               breads, crackers, pasta, and cereal
          这是再用另外一个额外的通配符来查找一些记录的例子。这个例子是怎样选出上面的查询结果中,description字段的第二子字母不是“e”的纪录。
                       select description from northwind.dbo.categories     
                       where patindex(%[b,b]read%,description) > 0  
                       and patindex(_[^e]%,description) = 1         
          通过在条件语句中增加一个使用^通配符的patindex函数,我们能够过滤掉“dessert, candies, and sweet breads”这条记录。上面的查询结果只有一条记录。
               description
               --------------------------------------------------------
               breads, crackers, pasta, and cereal  
    总结
          您现在能够发现charindex和patindex搜索字符串时的区分了吧。patindex函数支持使用通配符,能够用在很多有变化的查找中。而charindex不能够。根据您自己不同的情况,这两个函数对您在sql server中的字符串的搜索、控制、分析很有帮助。

  • 相关阅读:
    Network (poj1144)
    C. Hongcow Builds A Nation
    ZYB loves Xor I(hud5269)
    D. Chloe and pleasant prizes
    Game(hdu5218)
    约瑟夫环的递推方法
    Misaki's Kiss again(hdu5175)
    Exploration(hdu5222)
    B. Arpa's weak amphitheater and Mehrdad's valuable Hoses
    C. Arpa's loud Owf and Mehrdad's evil plan
  • 原文地址:https://www.cnblogs.com/lip-blog/p/7243729.html
Copyright © 2011-2022 走看看