实现目标:
字段: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 码值: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 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), -- 码值:01、02、03、04
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;