计算子串str2在字符串str1中的位置。
命令格式
bigint instr(string <str1>, string <str2>[, bigint <start_position>[, bigint <nth_appearance>]])
参数说明
str1:必填。STRING类型。待搜索的目标字符串。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME等类型,则会隐式转换为STRING类型后参与运算;如果输入不支持转化成STRING的类型则会返回报错。
str2:必填。STRING类型。待匹配的子串。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME等类型,则会隐式转换为STRING类型后参与运算;如果输入不支持转化成STRING的类型则会返回报错。
start_position:可选。BIGINT类型,其他类型会返回报错。表示从str1的第几个字符开始搜索,默认起始位置是第一个字符位置1。当start_position为负数时表示开始位置是从字符串的结尾往前倒数,最后一个字符是-1,依次往前倒数。
nth_appearance:可选。BIGINT类型,大于0。表示str2在str1中第nth_appearance次匹配的位置。如果nth_appearance为其他类型或小于等于0,则返回报错。
返回值说明
返回BIGINT类型。返回规则如下:
如果在str1中未找到str2,则返回0。
如果str2为空串,则总能匹配成功,例如
select instr('abc','');
会返回1。str1、str2、start_position或nth_appearance值为NULL时,返回NULL。
使用示例
示例1:计算字符
e
在字符串Tech on the net
中的位置。命令示例如下。--返回2。 select instr('Tech on the net', 'e');
示例2:计算子串
on
在字符串Tech on the net
中的位置。命令示例如下。--返回6。 select instr('Tech on the net', 'on');
示例3:计算字符
e
在字符串Tech on the net
中,从第3个字符开始,第2次出现的位置。命令示例如下。--返回14。 select instr('Tech on the net', 'e', 3, 2);
示例4:任一输入参数为NULL。命令示例如下。
--返回NULL。 select instr('Tech on the net', null);
相关函数
INSTR函数属于字符串函数,更多查找字符串、转换字符串格式的相关函数请参见字符串函数。