GBase 8s自定义使用find_in_set()函数
从mysql迁移到GBase 8s数据库时,原有find_in_set函数在GBase 8s中不可用,因此需要自己创建相应的函数,可以使用C或者JAVA创建自定义例程,也可以使用存储过程。以下以存储过程方式创建。
该函数实现的功能是:第一个参数pstr在第二个参数pstrlist,以pdel为分隔符(默认为,)中的分隔位置。
文档更新于2023-12-29
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | DROP FUNCTION IF EXISTS find_in_set( VARCHAR , VARCHAR , varchar ); CREATE FUNCTION find_in_set(pstr varchar (255),pstrlist varchar (255),pdel varchar (10) DEFAULT ',' ) RETURNS int WITH ( NOT variant); define v_curr int ; -- 当前位置 define v_last int ; -- 下一位置 define v_num int ; -- 计数 define v_tmpstr varchar (255); -- 临时文本 ON EXCEPTION RETURN NULL ; END EXCEPTION; let v_num = 1; let v_curr = 1; loop let v_last = instr(pstrlist,pdel,1,v_num); IF v_last > 0 THEN let v_tmpstr = substr(pstrlist,v_curr,(v_last - v_curr)); ELSE let v_tmpstr = substr(pstrlist,v_curr); END IF; IF pstr = v_tmpstr THEN RETURN v_num; END IF; exit WHEN v_last == 0; let v_num = v_num + 1; let v_curr = v_last + 1; END loop; RETURN 0; END FUNCTION ; |
示例:
1 | select find_in_set( '南大' , '南大通用,天津南大通用,南大,南大通用北京,广东南大通用' ) from dual; |
得到的结果如下:
1 2 3 | |(expression) | |-------------| |3 | |