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。
注意
position 和 occurrence 都必须是能够解析为整数的类型。两个参数的默认值都是 1,代表 Vertica 开始搜索字符串的第一个字符在子字符串中首次出现的位置。返回值与 position 值无关,从字符串的开端开始计算,并且是一个字符。
如果搜索不成功(即子字符串未在 string 的 position 字符后显示出现次数,则返回值为 0。
示例
第一个例子是在字符串 ‘abc’ 中从左到右搜索子字符串 ‘b’。搜索 ‘b’ 在 ‘abc’ 中出现的位置,或 position 2。以为没有提供 position 参数, 搜索默认从 position 1 ,‘a’ 开始。
=> SELECT INSTR('abc', 'b');
INSTR
-------
2
(1 row)
接下来的是哪个例子使用字符位置来从右到左搜索子字符串的位置。
注意
虽然函数返回一个负数看上去比较直观,n 出现的位置是从左到右数,而搜索是按照相反方向进行 (从右到左进行)。第一个例子中, 函数从字符串最后一个字符 ‘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)