CREATE FUNCTION f_decode(v varchar(2000),dic varchar(2000),el varchar(2000)) RETURNS varchar(2000) CHARSET utf8mb4
BEGIN
declare res varchar(2000) default v;
declare c int default find_in_set(v,dic);
declare i int default 0;
if c > 0 then
set res = dic;
while i < c do
set res = substr(res,instr(res,',')+1);
set i = i + 1;
end while;
if instr(res,',') then
set res = substring(res,1,instr(res,',')-1);
end if;
else
set res = el;
end if;
RETURN res;
END
使用find_in_set函数,先找到值在列表中的位置,然后用逗号定位解析的值,如果没在列表里边,就返回第二个值,和oracle的使用方式差不多,但是只能使用固定的列表,相当于只实现了静态的字典。
例:
select f_decode(1,'1,a,2,b','c')
返回 a