本文介绍GBase 8a内置的INSTR函数使用方法和样例。该函数用于在指定字符串里查找目标字符串出现的位置。
目录导航
参考
GBase 8a 模糊查询和正则函数regexp_replace、regexp_like
语法
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)