SQLserver中字符串查找功能patindex和charindex的区别
SQL server中patindexh和charindex函数,都可以在一段字符中搜索字符或字符串。
主要区别在:patindex函数支持使用通配符来进行搜索,charindex不支持通配符。
一、patindex函数
语法格式:patindex ( %pattern% , expression )
pattern:是要搜索的字符串
expression:是被搜索的字符串。
patindex函数返回字符或字符串在另一个字符串或表达式中的起始位置。
patindex函数支持搜索字符串中使用通配符,这也是patindexh和charindex函数主要的区别。
例:
patindex(%bc%,abcd) --返回:2
patindex(ab%,abcd) --返回:1
SQL中可以使用的通配符有:
1、%,替代一个或多个字符
2、_,仅替代一个字符
3、[charlist],字符列中的任何单一字符
4、[^charlist]或者[!charlist],不在字符列中的任何单一字符
二、charindex 函数
语法格式:charindex ( expression1 , expression2 [ , start_location ] )
expression1:是在expression2中寻找的字符
start_location:是charindex函数开始在expression2中找expression1的位置
charindex函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置。假如charindex没有找到要找的字符串,那么函数整数0。
例:
charindex(sql, microsoft sql server) --返回:11
charindex(7.0, microsoft sql server 2000) --返回:0
SQLserver中字符串查找功能patindex和charindex的区别
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下面是这个命令输出的结果。 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中的字符串的搜索、控制、分析很有帮助。
SQLserver中字符串查找功能patindex和charindex的区别
patindex(pattern,expression) 精确匹配,完全匹配1,不完全匹配0
例如:patindex('aa','aa') 返回1 完全匹配
patindex('aa','aab') 返回0 不完全匹配
patindex(%pattern%,expression)模糊匹配,返回从第几位开始匹配
例如:patindex('%aa%','ssaaa') 返回3 模糊从第三位开始匹配
patindex('%aa','ssddaa') 返回5 模糊从第五位开始匹配
patindex('%aa','ssddaaa') 返回6 模糊从第六位开始匹配
patindex('%aa%','ssddaaa') 返回5 模糊从第五位开始匹配
charindex(pattern,expression)精确匹配,返回第一个满足条件的下标
例如:charindex(aa,aas) 返回1 从第一位开始精确匹配
charindex(aa,saas) 返回2 从第二位开始精确匹配
charindex(aa,saaas) 返回2 从第二位开始精确匹配
charindex(aa,sas) 返回0 没有完全精确匹配的
函数多试试就知道其用法了,多实践
sql 提取字母或数字
改成:
while PATINDEX('%[^A-Z]%',@S)>0
begin
set @s=stuff(@s,patindex('%[^A-Z]%',@s),1,'')
end
while PATINDEX('%[^a-z]%',@S)>0
begin
set @s=stuff(@s,patindex('%[^a-z]%',@s),1,'')
end
试试
sql中where截取字符串字符
sql中在where字句里截取字符方法如下:1、如果是sqlserver:where left(p.end_time,4) = '2012'。2、如果是Oracle:where substr(p.end_time,0,4) = '2012'。举例:1、oracle: 'where substr(字段名,1,2)='''123''''2、sqlserver: 'where substring(字段名,1,2)='''123''''扩展资料:sql中,常用函数介绍:1、AVG():返回平均值2、COUNT():返回行数3、FIRST():返回第一个记录的值4、LAST():返回最后一个记录的值5、MAX():返回最大值6、MIN():返回最小值7、SUM():返回总和8、UCASE():将某个字段转换为大写9、LCASE():将某个字段转换为小写10、MID():从某个文本字段提取字符11、LEN():返回某个文本字段的长度12、ROUND():对某个数值字段进行指定小数位数的四舍五入13、NOW():返回当前的系统日期和时间14、FORMAT():格式化某个字段的显示方式15、INSTR():返回在某个文本域中指定字符的数值位置16、LEFT():返回某个被请求的文本域的左侧部分17、RIGHT():返回某个被请求的文本域的右侧部分参考资料来源:百度百科-SQL函数
sql如何截取字符?
sql 截取字符串:1、LOCATE(substr , str ):返回子串 substr 在字符串 str 中第一次出现的位置,如果字符substr在字符串str中不存在,则返回0;2、POSITION(substr IN str ):返回子串 substr 在字符串 str 中第一次出现的位置,如果字符substr在字符串str中不存在,与LOCATE函数作用相同;3、LEFT(str, length):从左边开始截取str,length是截取的长度;4、RIGHT(str, length):从右边开始截取str,length是截取的长度;5、SUBSTRING_INDEX(str ,substr ,n):返回字符substr在str中第n次出现位置之前的字符串;6、SUBSTRING(str ,n ,m):返回字符串str从第n个字符截取到第m个字符;7、REPLACE(str, n, m):将字符串str中的n字符替换成m字符;8、LENGTH(str):计算字符串str的长度。
在sql语句中,like所有的用法
like中or的应用:or指或者的意思,如果sql语句中用到这个连接字符,就说明查询的结果只要符合其中一种条件就可以。LIKE操作符用于在WHERE子句中搜索列中的指定模式。LIKE语句的语法格式是:selectfrom表名where字段名like对应值(子串),它主要是针对字符型字段的,它的作用是在一个字符型字段列中检索包含对应子串的。likeMc%将搜索以字母Mc开头的所有字符串。like%inger将搜索以字母inger结尾的所有字符串。like%en%将搜索在任何位置包含字母en的所有字符串。
sql like怎么使用?
标准SQL中用like进行模糊查询,有两个通配符:%百分号代表任意个字符,_下划线代表一个字符。1、like'Mc%' 将搜索以字母 Mc 开头的所有字符串。2、like'%inger' 将搜索以字母 inger 结尾的所有字符串。3、like'%en%' 将搜索在任何位置包含字母 en 的所有字符串。SQL LIKE 操作符语法‘_':下划线,表示1个任意字符;如 ... where name like '_am',表示仅第一位任意,并以'am'结尾,结果如"Tam","Mam","Pam"等。'%’: 百分号,表示任意个任意字符;如 ... where name like ‘%am',表示前面可以有任意位,只要以'am'结尾,结果如"abcam",“bcdefgham","qwertyuiopam","am"等等。以上内容参考:百度百科-SQL LIKE