EsgynDB新版本之instr函数

在EsgynDB2.5版本以前,虽然已经支持了instr函数,但只支持两个参数的方式,即查询匹配某个字符串出现的位置(默认首次)。如下,

>>select instr('aaa#bbb#ccc','#') from dual;

(EXPR)    
----------

         4

--- 1 row(s) selected.

此时,instr函数也可以用position函数代替,如,

>>select position('#' in 'aaa#bbb#ccc') from dual;

(EXPR)    
----------

         4

--- 1 row(s) selected.

无论是instr函数,或是position函数,都只能获取匹配字符在字符串中第一次出现的位置,但如果想获取第二个#或者第三个第四个#出现的位置就不能做到了。
在即将到来的EsgynDB 2.5的版本里面,我们对instr函数做了改进,不仅可以支持原来的两个参数的方式,也支持三个、四个参数的方式。

格式一:instr( string1, string2 )    /   instr(源字符串, 目标字符串)

格式二:instr( string1, string2 , start_position )   /   instr(源字符串, 目标字符串, 起始位置)

格式三:instr( string1, string2 , start_position , nth_appearance )   /   instr(源字符串, 目标字符串, 起始位置, 匹配序号)

格式四:instr( string2  in string1 )   /   instr(源字符串, 目标字符串, 起始位置, 匹配序号)

解析:string2 的值要在string1中查找,是从start_position给出的数值(即:位置)开始在string1检索,检索第nth_appearance(几)次出现string2。

下面我们仍然用上述例子来试验四个参数的情况下查询第N个匹配的字符串的位置,

//从第1位开始查询第1个#的位置
>>select instr('aaa#bbb#ccc','#',1,1) from dual;

(EXPR)    
----------

         4

--- 1 row(s) selected.
//从第1位开始查询第2个#的位置
>>select instr('aaa#bbb#ccc','#',1,2) from dual;

(EXPR)    
----------

         8

--- 1 row(s) selected.
//从第5位开始查询第1个#的位置
>>select instr('aaa#bbb#ccc','#',5,1) from dual;

(EXPR)    
----------

         8

--- 1 row(s) selected.
//IN方式,查找第一个匹配,相当于position函数
>>select instr('#' in 'aaa#bbb#ccc') from dual;

(EXPR)    
----------

         4

--- 1 row(s) selected.
//三个参数,表示查找从第N位开始的第一个匹配位置
>>select instr('aaa#bbb#ccc','#',5) from dual;

(EXPR)    
----------

         8

--- 1 row(s) selected.

你可能感兴趣的:(EsgynDB新版本之instr函数)