南大通用GBase 8a函数INSTR的使用样例

本文介绍GBase 8a内置的INSTR函数使用方法和样例。该函数用于在指定字符串里查找目标字符串出现的位置。

参考

GBase 8a 模糊查询和正则函数regexp_replace、regexp_like

GBase 8a字符串和日期函数列表索引

语法

INSTR(str,substr) 
INSTR(str,substr,start_position)
INSTR(str,substr,start_position,nth_appearance)

说明

如果找到,返回从左开始的位置,从1开始,不区分查找方向;如果没找到,返回0。

  • str : 被查找的原始字符串。
  • substr : 查找的内容。
  • start_position : 查找开始的位置,从左面第几个字符开始匹配。如果是负数,则从右向左匹配。默认为1。
  • nth_appearance :从 start_position 开始向字符串尾方向查找第几个匹配字符串。可选参数,默认为 1。

样例

普通查找

返回其出现的字符位置。从1开始。

gbase> select instr('1234567890','1');
+-------------------------+
| instr('1234567890','1') |
+-------------------------+
|                       1 |
+-------------------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select instr('1234567890','5');
+-------------------------+
| instr('1234567890','5') |
+-------------------------+
|                       5 |
+-------------------------+
1 row in set (Elapsed: 00:00:00.00)

查找不存在的字符

返回0。

gbase> select instr('1234567890','a');
+-------------------------+
| instr('1234567890','a') |
+-------------------------+
|                       0 |
+-------------------------+
1 row in set (Elapsed: 00:00:00.00)

查找空字符串

返回1。

gbase> select instr('1234567890','',1,30);
+-----------------------------+
| instr('1234567890','',1,30) |
+-----------------------------+
|                           1 |
+-----------------------------+
1 row in set (Elapsed: 00:00:00.00)

查找NULL

返回NULL.注意不是0。

gbase> select instr('1234567890',null);
+--------------------------+
| instr('1234567890',null) |
+--------------------------+
|                     NULL |
+--------------------------+
1 row in set (Elapsed: 00:00:00.00)

指定起始位置

从指定的位置开始查找,第一个位置是1.

gbase> select instr('123123412345',1,1);
+---------------------------+
| instr('123123412345',1,1) |
+---------------------------+
|                         1 |
+---------------------------+
1 row in set (Elapsed: 00:00:00.00)

从第2个位置开始查找,返回的是其后面的第一次出现位置。

gbase> select instr('123123412345',1,2);
+---------------------------+
| instr('123123412345',1,2) |
+---------------------------+
|                         4 |
+---------------------------+
1 row in set (Elapsed: 00:00:00.00)

指定起始位置0

返回0

gbase> select instr('123123412345',1,0);
+---------------------------+
| instr('123123412345',1,0) |
+---------------------------+
|                         0 |
+---------------------------+
1 row in set (Elapsed: 00:00:00.00)

指定出现的次数

如下分别查找第1,2,3次出现的位置。为方便对比,起始位置用的都是1。

gbase> select instr('123123412345',1,1,1);
+-----------------------------+
| instr('123123412345',1,1,1) |
+-----------------------------+
|                           1 |
+-----------------------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select instr('123123412345',1,1,2);
+-----------------------------+
| instr('123123412345',1,1,2) |
+-----------------------------+
|                           4 |
+-----------------------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select instr('123123412345',1,1,3);
+-----------------------------+
| instr('123123412345',1,1,3) |
+-----------------------------+
|                           8 |
+-----------------------------+
1 row in set (Elapsed: 00:00:00.00)

反向查找

和前一个例子参数相同,只不过起始位置是-1。 其结果也是正好反过来匹配到的位置。

gbase> select instr('123123412345',1,-1,1);
+------------------------------+
| instr('123123412345',1,-1,1) |
+------------------------------+
|                            8 |
+------------------------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select instr('123123412345',1,-1,2);
+------------------------------+
| instr('123123412345',1,-1,2) |
+------------------------------+
|                            4 |
+------------------------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select instr('123123412345',1,-1,3);
+------------------------------+
| instr('123123412345',1,-1,3) |
+------------------------------+
|                            1 |
+------------------------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select instr('123123412345',1,-1,4);
+------------------------------+
| instr('123123412345',1,-1,4) |
+------------------------------+
|                            0 |
+------------------------------+
1 row in set (Elapsed: 00:00:00.00)