zOs/SQL/FOSREALK
--
-- convert a number 17K, 5M etc to real
--
set current sqlid = 'S100447';
drop function OA1P.fosRealK(n varchar(40));
drop function OA1P.fosRealK(n varchar(40), unit char(1));
create function OA1P.fosRealK(n varchar(40), unit char(1)) returns real
return case
when unit = 'K' then real(strip(left(n, length(n)-1)))* 1024
when unit = 'M' then real(strip(left(n, length(n)-1)))
* 1024 * 1024
when unit = 'G' then real(strip(left(n, length(n)-1)))
* 1024 * 1024 * 1024
when unit = 'T' then real(strip(left(n, length(n)-1)))
* 1024 * 1024 * 1024 * 1024
else real(n)
end;
create function OA1P.fosRealK(n varchar(40)) returns real
return oa1p.fosRealK(strip(n), char(upper(right(strip(n), 1)), 1));
select char(a, 20), oa1p.fosRealK(a) from
( select ' 1234 ' a from sysibm.sysDummy1
union all select ' 567K ' a from sysibm.sysDummy1
union all select ' 89 K ' a from sysibm.sysDummy1
union all select '10 K' a from sysibm.sysDummy1
union all select ' 23 M ' a from sysibm.sysDummy1
union all select ' 45G' a from sysibm.sysDummy1
) v;