自定义函数实现Mysql的find_in_set()函数功能

问题:

从mysql迁移到SinoDB数据库时,原有find_in_set函数在SinoDB中不可用。

原因:

SinoDB库没有 find_in_set函数。

解决办法:

创建自定义函数实现mysql的find_in_set函数功能。

drop function if exists find_in_set;

/* 该函数实现的功能是:第一个参数str在第二个参数strlist(以,分隔的字符串)中的分隔位置。*/

create function find_in_set(str varchar(255),strlist lvarchar(10000)) returns int;
  define currp  int;            -- 当前位置
  define lastp  int;            -- 上次位置
  define sepnum int;
  define strlen int;
  define strtmp lvarchar(10000);
 
  let lastp  = 1;
  let sepnum = 0;
  let strtmp = strlist || ",";  -- 追加一个分隔符','
  let strlen = length(strtmp);
  FOR currp = 1 TO strlen
    IF substr(strtmp,currp,1) = ',' THEN
      let sepnum = sepnum + 1;
      IF substr(strtmp,lastp,currp - lastp) = str THEN
        RETURN sepnum;
      END IF;
      let lastp = currp + 1;
    END IF;
  END FOR;
  RETURN 0;
end function;

函数执行结果:

$ dbaccess testdb -

Database selected.

> select find_in_set('星瑞格','福州星瑞格,福建福州星瑞格,星瑞格,星瑞格北京') from sysmaster:sysdual;


(expression) 

           3

1 row(s) retrieved.

>