db2 拆分字符串自定义函数

实现目标:
字段:relationship的值:01@02@03@04。
将这个字符串拆分01、02、03、04,然后转换成对应的值。
最后组成的结果是:父亲,母亲,妻子,兄弟。

table : re_liarbry
select itemcode, itemname, liarbry_name from re_liarbry
where liarbry_name = 'relationship';
--re_liarbry 字典表
--code 码值:01020304
--name 名称:父亲,母亲,妻子,兄弟
--liarbry_name 字典的命名
--getItemName(a,b);//获取对应的值
select code, name from re_liarbry;

create or replcae function getItemName(
	liarbry_name varchar(10),
	code varchar(10)
)
RETURNS varchar(20)
NO EXTERNAL ACTION
BEGIN ATOMIC
	RETURN select itemname from re_liarbry
	where liarbry_name = liarbry_name;
END;
实现:利用LOCATE()SUSTR()函数;
思路:根据LOCATE(split,TypeValue)获取到第一个@的位置,
然后截取字符串把01截取出来,再赋值到v_value,
通过while 循环 v_index != 0 ,直到获取不到@的位置,
最后得到结果。


create or replace function getTypeValue(
	ItemName varchar(20), -- 名称:父亲,母亲,妻子,兄弟
	TypeValue varchar(50), -- 码值:01020304
	split varchar(5) --分割符:@
)
RETURNS varchar(200)
NO EXTERNAL ACTION
BEGIN ATOMIC
	DECLARE v_index integer;
	DECLARE v_value varchar(200);
	DECLARE v_lastIndex integer;
	DECLARE v_len integer;
	
	SET v_value = '';
	SET v_lastIndex = 0;
	SET v_index = LOCATE(split,TypeValue);--开始搜索的位置
	SET v_len = v_index - 1;
	
	IF (TypeValue = '' or  TypeValue = NULL) 
		THEN RETURN '';
	END IF;
	
	IF v_index = 0
		THEN RETURN getItemName(ItemName,TypeValue);
	END IF;

	while v_index != 0 do
		SET v_value = v_value || 
		 getItemName(ItemName,SUSTR(TypeValue,v_lastIndex + 1,v_len)) || ',';
		 SET v_lastIndex = v_index;
		 SET v_index = LOCATE(split,TypeValue,v_index + 1);
		 SET v_len = v_index - v_lastIndex -1;
	END while;
	
	IF v_index = 0;
		THEN
		SET v_value = SUBSTR(v_value,1,LENGTH(v_value) - 1);
		RETURN v_value;
	END IF;
END;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

燕長亭

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值