SQL中CharIndex函数、InStr 函数、PatIndex函数、Stuff函数区别与作用

在c#中可以用字符串的IndexOf方法来判断一个字符串中是否含有指定的字符。而在SQL SERVER中也就相关的函数来实现IndexOf的功能。CharIndex,InStr,PatIndex三个函数就是和IndexOf类似,最后介绍一个替换插入字符的函数Stuff。
下面就来说说SQL中CharIndex函数、InStr 函数、PatIndex函数、Stuff函数区别与作用。

一、CHARINDEX 函数
SQL SERVER中的CharIndex作用:返回字符或者字符串在另一个字符串中的起始位置。

CHARINDEX 函数调用方法如下:

CHARINDEX ( expression1 , expression2 [ , start_location ] )

Expression1 是要到 expression2 中寻找的字符中,start_location 是 CHARINDEX 函数开始在 expression2 中找expression1 的位置。

CHARINDEX 函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置。假如 CHARINDEX 没有找到要找的字符串,那么函数整数“0”。

例如:

SELECT CHARINDEX(‘a’,‘abcd’)
结果:1
注意:CHARINDEX是查找第一个匹配的子字符串的位置,如果第三个参数的start_location没有设置也就是从第一个字符开始查找。

SELECT CHARINDEX(‘a’,‘abcda’)–返回1
SELECT CHARINDEX(‘a’,‘abcda’,2)–返回5
二、InStr 函数
这个InStr在SQL SERVER没有这个函数在Oracle和mysql中有,但是参数有点不一样。

2.1、Oracle
返回某字符串在另一字符串中第一次出现的位置。

InStr 函数调用方法如下:

InStr([start, ]string1, string2[, compare])

参数

start:可选项。数值表达式,用于设置每次搜索的开始位置。如果省略,将从第一个字符的位置开始搜索。如果 start 包含 Null,则会出现错误。如果已指定 compare,则必须要有 start 参数。

string1:必选项。接受搜索的字符串表达式。

string2:必选项。要搜索的字符串表达式。compare可选项。指示在计算子字符串时使用的比较类型的数值。有关数值,请参阅“设置”部分。如果省略,将执行二进制比较。两个函数的性质非常效果一样就是搜索一个字符是否出现在另外一个字符串里面。

2.2、mysql
mysql的InStr就比较简单了,只有两个参数。INSTR(字段名, 字符串)。

例如:

mysql> select instr(‘abb’,‘b’);–返回2
三、PATINDEX 函数
SQL SERVER中的PATINDEX 函数返回字符或者字符串在另一个字符串或者表达式中的起始位置,PATINDEX 函数支持搜索字符串中使用通配符,这使PATINDEX函数对于变化的搜索字符串很有价值。和 CHARINDEX 函数一样,PATINDEX 函数返回搜索字符串在被搜索字符串中的起始位置。假如有这样一个PATINDEX 函数:

PATINDEX(’%BC%’,’ABCD’)

这个 PATINDEX 函数返回的结果是2,这和 CHARINDEX 函数一样。这里的 % 标记告诉 PATINDEX 函数去找字符串 “BC”,不管被搜索的字符串中在 “BC” 的前后有多少字符!

功能:返回模式在字符串中第一次出现的位置

patindex( ‘%pattern%’ , expression )

pattern:要查找的模式

expression:被找的字符串

select patindex(’%jinweida%’,‘123jinweida54’)
结果:4

四、Stuff功能
SQL SERVER中的stuff的功能:删除指定长度的字符串并在指定的起始点插入另一组字符。

STUFF ( character_expression , start , length , character_expression )

character_expression :操作的字符,

start:删除和插入的起始点,

length:删除的长度,

character_expression :要插入的字符

Select stuff(‘abcdef’,2,3,‘ghijk’)
结果:aghijkef


原文地址:https://www.cnblogs.com/lllini/p/11955214.html