表A有一个字段vertype,存储的值01,02,03;对应表B(vertype,vervalue):01为手机,02为电话,03为电脑;
如何写一个函数让页面展示vertype的时候,如果vertype为01,页面展示位手机;如果为01,02;页面展示为:手机,电话。求指导
------解决方案--------------------
我做过类似的,不过我的编码是固定长度的。
先 len(str)-len(replace,',','') 算出一共几个逗号
然后 loop
用substr(currlen,currlen+2*i)。
------解决方案--------------------
s1 := ','
------解决方案--------------------
'01,02,03'
------解决方案--------------------
',';
for c in select * from B where s1 like '%,'
------解决方案--------------------
vertype
------解决方案--------------------
',%'
loop
s1 := replace(s1,','
------解决方案--------------------
c.vertype
------解决方案--------------------
',' , ','
------解决方案--------------------
c.vervalue
------解决方案--------------------
',');
end loop;
s1 := substr(s1, 2, length(s1)-2);
------解决方案--------------------
前面两个with是模拟数据,后面的是查询结果。
首先使用笛卡尔积,制造结果集,然后利用01,02,03是否在前面的vertype中作为过滤条件,最后使用Oracle的WMSYS.WM_CONCAT函数来归集结果。
WITH a AS(
SELECT '01,' AS vertype FROM dual UNION
SELECT '01,02' AS vertype FROM dual UNION
SELECT '01,02,03' AS vertype FROM dual UNION
SELECT '01,03' AS vertype FROM dual