问题:
从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.
>