一、效果展示
select cascadeselect('北京市,西城区,西直门', '1,3');
结果:北京市,西直门
二、需求说明
针对级联型字段使用的函数,函数中可以截取多级,参数的数量可变,截取选中的级别,截取之后进行拼接。如:CASCADESELECT(级联字段,'2,3'),将级联字段截取出第二级和第三级,再最后拼接起来。
【页面说明】
-
用法:CASCADESELECT(级联字段,'参数1,参数2,…')
-
说明:支持对级联字段的每级进行截取,级联字段数用1、2、3来填充。可多选,截取之后的各级将会按照参数的顺序拼接
-
示例:CASCADESELECT([工单:级联字段],'1,3')表示截取工单级联字段的第一级和第三级菜单并拼接起来作为维度
【注意事项】
-
不管参数的顺序如何,最后拼接的时候按照函数中的参数顺序进行排序
-
参数中有超过级联级数的值时,函数错误(如某级联字段一共只有三级,但参数中有4,则此函数错误)
三、存储过程
-- 查询:select cascadeselect('北京市,西城区,西直门', '1,3');
-- 输出:北京市,西直门
create function cascadeselect(value text, levels text) returns text
language plpgsql
as
$$
DECLARE
RESULT text;
level integer;
CASCADE_LEVEL text[];
BEGIN
IF levels = '' THEN
RETURN value;
END IF;
CASCADE_LEVEL = string_to_array(levels, ',');
BEGIN
foreach level IN array CASCADE_LEVEL
LOOP
RESULT = concat_ws(',', RESULT, split_part(value, ',', level));
END LOOP;
END;
RETURN RESULT;
END;
$$;