仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 925|回复: 8
打印 上一主题 下一主题

[学习教程] CHARINDEX和PATINDEX

[复制链接]
再现理想 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:19:57 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
对于insert操作,只需要把event_type改成DELETE_ROWS_EVENT;对于delete操作,改成WRITE_ROWS_EVENT<p>SQLServerCHARINDEX和PATINDEX详解
假设你写过良多程序,你大概偶然会碰着要断定字符或字符窜串否包括在一段笔墨中,在这篇文章中,我将会商利用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’,’MicrosoftSQLServer’)
这个函数命令将前往在“MicrosoftSQLServer”中“SQL”的肇端地位,在这个例子中,CHARINDEX函数将前往“S”在“MicrosoftSQLServer”中的地位11。
接上去,我们看这个CHARINDEX命令:
CHARINDEX(’7.0’,’MicrosoftSQLServer2000’)
在这个例子中,CHARINDEX前往零,由于字符串“7.0”不克不及在“MicrosoftSQLServer”中被找到。接上去经由过程两个例子来看看怎样利用CHARINDEX函数来办理实践的T-SQL成绩。
第一个例子,假定你要显现Northwind数据库Customer表前5行接洽人列的LastName。这是前5行数据
ContactName
------------------------------
MariaAnders
AnaTrujillo
AntonioMoreno
ThomasHardy
ChristinaBerglund
你能够看到,CustomName包括客户的FirstName和LastName,它们之间被一个空格离隔。我用CHARINDX函数断定两个名字两头空格的地位。经由过程这个办法,我们能够剖析ContactName列的空格地位,如许我们能够只显现这个列的lastname部分。这是显现Northwind的Customer表前5行lastname的纪录!
selecttop5substring(ContactName,charindex(’’,ContactName)+1,
len(ContactName))as[LastName]fromNorthwind.dbo.customers
上面是这个命令输入的了局。
LastName
------------------------------
Anders
Trujillo
Moreno
Hardy
Berglund
CHARINDEX函数找到FirstName和LastName之间的空格,以是SUBSTRING函数能够分隔ContactName列,如许就只要LastName被选出。我在CHARINDEX函数前往的整数上加1,如许LastName不是从空格入手下手。
在第二个例子中,即如说你要盘算纪录中,某一个字段包括特定字符的一切纪录数。CHARINDEX函数能够便利的办理你的成绩。盘算Northwind.dbo.Customer表中Addresses字段中包括单词Road大概它的缩写Rd的纪录数,选择语句相似如许:
SELECTcount(*)fromNorthwind.dbo.Customers
WHERECHARINDEX(’Rd’,Address)>0orCHARINDEX(’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’)
注重在下面这个例子中的搜刮字符部分利用了良多的通陪符。观察SQLServer联机丛书能够取得更多关于通佩符的信息。接上去,我们用两个例子来看PATINDEX和SELECT怎样团结起来利用。

假定你想要找出Northwind.dbo.Categories表中Description字段中是包括单词“Bread”或“bread”的一切纪录,那末选择语句便可能是如许:
SELECTDescriptionfromNorthwind.dbo.Categories
WHEREpatindex(’%[b,B]read%’,description)>0
这里我用通配符来断定年夜写和小写的“b”。我在Notthwind数据库中实行这个剧本后,失掉上面的了局:
Description
--------------------------------------------------------
Desserts,candies,andsweetbreads
Breads,crackers,pasta,andcereal
这是再用别的一个分外的通配符来查找一些纪录的例子。这个例子是怎样选出下面的查询了局中,Description字段的第二子字母不是“e”的记录。
selectDescriptionfromNorthwind.dbo.Categories
&nbsp导致了一个使用几乎和mSQL一样的API接口的用于他们的数据库的新的SQL接口的产生,这样,这个API被设计成允许为用于mSQL而写的第三方代码更容易移植到MySQL。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-10 01:27

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表