mysql自定义函数实现,自定义oracle中decode方法

要想知道怎么定义第一步要知道oracle中decode是怎么实现呢?

decode(expression,value1,result1,value2,result2,value3,result3…,default)

如果expression=value1,则输出result1,expression=value2,输出reslut2,expression=value3,输出result3,

若expression不等于所列出的所有value,则输出为default

就是说在decdoe中,拿出第一个值是对比后面值,键值对类型返回,如果条件不为key值,那么就返回最后默认值。

在我的迁移过程中,我们试图的参数大部分为四个参数的decode,那么我就定义一个为四个参数的decode

需要注意一点正常思路用键值对做比较走下来会发现如果参数为null,那么在mysql中将不会做比较,特殊处理后为以下情况:

CREATE FUNCTION decode_oracle(pattern VARCHAR(255),string_a VARCHAR(255),string_b VARCHAR(255),string_c VARCHAR(255)) RETURNS varchar(255) 
BEGIN 
DECLARE result VARCHAR(255) DEFAULT "";
#正常对比函数
if pattern=string_a then
set result = string_b;
ELSEIF pattern=string_b then
set result = string_c;
ELSEIF pattern=string_c then
set result = string_c;
#处理空值
ELSEIF string_a is null then
 if pattern is not null then
 set result = string_c;
 ELSE
 set result = string_b;
 end if;
ELSEIF string_b is null then
set result = string_c;
ELSEIF string_c is null then
set result = string_c;
ELSE
set result = string_c;
END IF;
  RETURN result;
END;

如果对你有帮助,就点个关注吧,后续持续输出技术文章~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值