Okay, I'll post my SQL code, that'll make the task easier to uderstand. However, I just do the conversion from packed decimal to decimal. Still, primitive solution:
Code:
CREATE function dbo.convert_COBOL_unpacked_decimals (@amtstring as varchar(255))
returns decimal(18,2)
begin
declare @amtdecimal integer
set @amtdecimal =
case
when ltrim(rtrim(@amtstring))='' then NULL
when right(@amtstring,1)='R' then '-'+left(@amtstring,len(@amtstring)-1)+'9'
when right(@amtstring,1)='Q' then '-'+left(@amtstring,len(@amtstring)-1)+'8'
when right(@amtstring,1)='P' then '-'+left(@amtstring,len(@amtstring)-1)+'7'
when right(@amtstring,1)='O' then '-'+left(@amtstring,len(@amtstring)-1)+'6'
when right(@amtstring,1)='N' then '-'+left(@amtstring,len(@amtstring)-1)+'5'
when right(@amtstring,1)='M' then '-'+left(@amtstring,len(@amtstring)-1)+'4'
when right(@amtstring,1)='L' then '-'+left(@amtstring,len(@amtstring)-1)+'3'
when right(@amtstring,1)='K' then '-'+left(@amtstring,len(@amtstring)-1)+'2'
when right(@amtstring,1)='J' then '-'+left(@amtstring,len(@amtstring)-1)+'1'
when right(@amtstring,1)='}' then '-'+left(@amtstring,len(@amtstring)-1)+'0'
when right(@amtstring,1)='{' then '+'+left(@amtstring,len(@amtstring)-1)+'0'
when right(@amtstring,1)='A' then '+'+left(@amtstring,len(@amtstring)-1)+'1'
when right(@amtstring,1)='B' then '+'+left(@amtstring,len(@amtstring)-1)+'2'
when right(@amtstring,1)='C' then '+'+left(@amtstring,len(@amtstring)-1)+'3'
when right(@amtstring,1)='D' then '+'+left(@amtstring,len(@amtstring)-1)+'4'
when right(@amtstring,1)='E' then '+'+left(@amtstring,len(@amtstring)-1)+'5'
when right(@amtstring,1)='F' then '+'+left(@amtstring,len(@amtstring)-1)+'6'
when right(@amtstring,1)='G' then '+'+left(@amtstring,len(@amtstring)-1)+'7'
when right(@amtstring,1)='H' then '+'+left(@amtstring,len(@amtstring)-1)+'8'
when right(@amtstring,1)='I' then '+'+left(@amtstring,len(@amtstring)-1)+'9'
else NULL
end
return cast(@amtdecimal as integer)
end
Code: