900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > db2 拆分字符串自定义函数

db2 拆分字符串自定义函数

时间:2022-11-15 16:56:23

相关推荐

db2 拆分字符串自定义函数

实现目标:

字段:relationship的值:01@02@03@04。

将这个字符串拆分01、02、03、04,然后转换成对应的值。

最后组成的结果是:父亲,母亲,妻子,兄弟。

table : re_liarbryselect itemcode, itemname, liarbry_name from re_liarbrywhere liarbry_name = 'relationship';--re_liarbry 字典表--code 码值:01、02、03、04--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 ACTIONBEGIN ATOMICRETURN select itemname from re_liarbrywhere 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), -- 码值:01、02、03、04split varchar(5) --分割符:@)RETURNS varchar(200)NO EXTERNAL ACTIONBEGIN ATOMICDECLARE 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 = 0THEN RETURN getItemName(ItemName,TypeValue);END IF;while v_index != 0 doSET 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;THENSET v_value = SUBSTR(v_value,1,LENGTH(v_value) - 1);RETURN v_value;END IF;END;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。