mysql 5.7 实现oracle的decode函数

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值