INSTR

搜索字符串中的子字符串,并返回一个整数,指示字符串中第一次出现的字符的位置。返回值代表被指定字符出现的位置。

行为类型

不可变

语法

INSTR ( string , substring [, position [, occurrence ] ] )

参数

string
(CHAR 或 VARCHAR, 或 BINARY 或 VARBINARY) 搜索文本表达式。
substring
(CHAR 或 VARCHAR,或 BINARY 或 VARBINARY) 搜索字符串。
position
非零整数,代表 Vertica 开始搜索的字符串中的字符。如果 position 为负,Vertica 在字符串尾部从右到左进行搜索。字符串的首字母 position 默认值为 1, position 不可为 0。
occurrence
整数,代表 Vertica 搜索的第几次出现的字符串。occurrence 值必须为正 (大于 0), 默认值为 1。

注意

positionoccurrence 都必须是能够解析为整数的类型。两个参数的默认值都是 1,代表 Vertica 开始搜索字符串的第一个字符在子字符串中首次出现的位置。返回值与 position 值无关,从字符串的开端开始计算,并且是一个字符。

如果搜索不成功(即子字符串未在 stringposition 字符后显示出现次数,则返回值为 0。

示例

第一个例子是在字符串 ‘abc’ 中从左到右搜索子字符串 ‘b’。搜索 ‘b’ 在 ‘abc’ 中出现的位置,或 position 2。以为没有提供 position 参数, 搜索默认从 position 1 ,‘a’ 开始。

=> SELECT INSTR('abc', 'b');
 INSTR
-------
     2
(1 row)

接下来的是哪个例子使用字符位置来从右到左搜索子字符串的位置。

第一个例子中, 函数从字符串最后一个字符 ‘c’ 开始,从右到左开始数一个字符。函数随后向后搜索第一次出现的‘a’,在搜索字符串中的第一个位置找到了该字符。

=> SELECT INSTR('abc', 'a', -1);
 INSTR
-------
     1
(1 row)

第二个例子中,函数从字符串最后一个字符 ‘c’ 开始,从右到左开始数一个字节。函数随后向后搜索第一次出现的‘a’,在搜索字符串中的第一个位置找到了该字符。

=> SELECT INSTR(VARBINARY 'abc', VARBINARY 'a', -1);
 INSTR
-------
     1
(1 row)

第三个例子中,函数从字符串最后一个字符 ‘b’ 开始,从右到左开始数一个字符,并且从右到左搜索子字符串 ‘bc’,并发现在所搜索字符串的第二个位置。

=> SELECT INSTR('abcb', 'bc', -1);
 INSTR
-------
     2
(1 row)

第四个例子中,函数从字符串最后一个字符 ‘b’ 开始,从右到左开始数一个字符, 并且从右到左搜索子字符串 ‘bcef’,并没有搜索到。结果为 0。

=> SELECT INSTR('abcb', 'bcef', -1);
INSTR
-------
     0
(1 row)

第五个例子中,函数从函数从字符串最后一个字符 ‘b’ 开始,从右到左开始数一个字节,并且从右到左搜索子字符串 ‘bcef’,并没有搜索到。结果为 0。

=> SELECT INSTR(VARBINARY 'abcb', VARBINARY 'bcef', -1);
INSTR
-------
     0
(1 row)

多字节字符被认为是一个单独的字符:

=> SELECT INSTR('aébc', 'b');
 INSTR
-------
     3
(1 row)

使用 INSTRB 将多字节字符做为二进制处理。

=> SELECT INSTRB('aébc', 'b');
  INSTRB
--------
      4
(1 row)