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;