实现目标:
字段: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;