SQLServer中查询子串在数组中的位置的代码PATINDEX()和CHARINDEX()
原创前言:
对于SQL Server许多人习惯于在字符串中查找字符串的问题。like,可以,但如果发生以下情况:
找出一个表中某列中的数据是否是另一个表中某列中的数据的子字符串,因为这两列都是变量名,所以不能使用。like做模糊匹配。需要使用以下两个函数。
SQL Server中函数PATINDEX()和CHARINDEX()都是可以找到子字符串在字符串中的位置的函数。
主要区别是:PATINDEX()支持通配符查找,CHARINDEX()不支持通配符查找。
1.语法:
1、PATINDEX()语法格式:PATINDEX(%pattern%,expression)
pattern:是要查找的子串
expression:是找到的字符串。
PATINDEX()此函数用于返回字符串或表达式中字符或子字符串的开头。
注:(1如果要找到的字符串中出现多个子字符串,PATINDEX()该函数返回位置下标的第一个匹配项。
(2)PATINDEX()必须使用通配符,否则无法找到子字符串,请参见示例。
2、CHARINDEX()语法格式:CHARINDEX(pattern,expression,start_location)
pattern:是要查找的子串
expression:是找到的字符串。
start_location:是charindex函数在中启动expression中找pattern起点位置
CHARINDEX()此函数返回一个整数,该整数返回子字符串在字符串或表达式中的起始位置。如果未找到子字符串,则函数结果为0。
2.示例:
1、PATINDEX()函数:
select SQL server2008,Hello World! as 整个字符串,PATINDEX(Hello,SQL server2008,Hello World!) 不带通配符的结果
select SQL server2008,Hello World! as 整个字符串,PATINDEX(%Hello%,SQL server2008,Hello World!) 添加通配符的结果

查询字符或子字符串出现多次。

2、CHARINDEX()函数:
--1,普通查找子字符串
select SQL server2008,Hello World! as 整个字符串,CHARINDEX(Hello,SQL server2008,Hello World!) 子串位置下标
--2,用下标的起始位置,然后从起始位置查找要查找的子字符串,再查找o就找到World的o,而不是Hello中的o下标的位置。
select SQL server2008,Hello World! as 整个字符串,CHARINDEX(o,SQL server2008,Hello World!,21) 子串位置下标
--3,找不到子字符串,返回0
select SQL server2008,Hello World! as 整个字符串,CHARINDEX(server2014,SQL server2008,Hello World!) 子串位置下标

版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123



