GBase 8s自定义使用find_in_set()函数

从mysql迁移到GBase 8s数据库时,原有find_in_set函数在GBase 8s中不可用,因此需要自己创建相应的函数,可以使用C或者JAVA创建自定义例程,也可以使用存储过程。以下以存储过程方式创建。
该函数实现的功能是:第一个参数pstr在第二个参数pstrlist,以pdel为分隔符(默认为,)中的分隔位置。

文档更新于2023-12-29

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;

示例:

select find_in_set('南大','南大通用,天津南大通用,南大,南大通用北京,广东南大通用') from dual;

得到的结果如下:

|(expression) |
|-------------|
|3            |

标签: gbase 8s, find_in_set

添加新评论