oracle 中,我有一个字段(名字叫 ‘输出参数’)的构造形如:“1|23|42323|阿斯达|4252额|安达安达a|安达a”,它使用“|”拼接的,长度挺长。
其中有几个我想取的值,由于他位置会变,但是有一定规律:
--rh_split是我自定义的分割函数,表示取第一个字符串。在这里并不重要。
总费用=rh_split(a.输出参数, '|', 31) + rh_split(a.输出参数, '|', 32)
而我好几个想取的数,都跟这个规律相关,于是我写出了如下代码:
select decode(rh_split(a.输出参数, '|', 31) + rh_split(a.输出参数, '|', 32),
a.总费用,
rh_split(a.输出参数, '|', 30),
rh_split(a.输出参数, '|', 31)) as 费用A,
decode(rh_split(a.输出参数, '|', 31) + rh_split(a.输出参数, '|', 32),
a.总费用,
rh_split(a.输出参数, '|', 31),
rh_split(a.输出参数, '|', 32)) as 费用B,
decode(rh_split(a.输出参数, '|', 31) + rh_split(a.输出参数, '|', 32),
a.总费用,
rh_split(a.输出参数, '|', 32),
rh_split(a.输出参数, '|', 33)) as 费用C,
decode(rh_split(a.输出参数, '|', 31) + rh_split(a.输出参数, '|', 32),
a.总费用,
rh_split(a.输出参数, '|', 33),
rh_split(a.输出参数, '|', 34)) as 费用D
from tableName a
就是用decode 重复判断这个规律,看起来就很复杂,这种情况能优化吗?这样的代码又长又臭,而且可能同一个值要计算好几次?