INSTR

计算子串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。表示str2str1中第nth_appearance次匹配的位置。如果nth_appearance为其他类型或小于等于0,则返回报错。

返回值说明

返回BIGINT类型。返回规则如下:

  • 如果在str1中未找到str2,则返回0。

  • 如果str2为空串,则总能匹配成功,例如select instr('abc','');会返回1。

  • str1str2start_positionnth_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函数属于字符串函数,更多查找字符串、转换字符串格式的相关函数请参见字符串函数