如何在Netezza中将隐含小数的COBOL字符串转换为十进制类型?

时间:2014-11-18 16:27:40

标签: sql netezza

请参阅我有一个像这样的COBOL列

05  AMOUNT      PIC 999V99.

这里V表示隐含小数。因此,123.45值将表示为12345

为了将其转换回 Netezza 中的decimal(5,2),我尝试了以下

CAST('12345' AS DECIMAL(5,2))  --This will cause overflow, of course
CAST('12345' AS DECIMAL(5))/100 --Works, but looks awkward

是否有人知道更好的转换方式' 12345'回到 Netezza中的小数(5,2)

由于

2 个答案:

答案 0 :(得分:1)

我使用将其转换为包装十进制然后转换为数字类型的方法。 我注意到转换为PACKED DECIMAL时需要额外的字符。额外的角色可以是任何角色。

前缀TOOLKIT.SQLEXT。是我们的扩展功能安装的地方。

SELECT  TOOLKIT.SQLEXT.PACKEDDECIMAL2STR(TOOLKIT.SQLEXT.NUM2PACKEDDEC('12345'||' ') ,2)::NUMERIC(5,2);

结果:

123.45
SELECT  TOOLKIT.SQLEXT.PACKEDDECIMAL2STR(TOOLKIT.SQLEXT.NUM2PACKEDDEC('-12345'||' ') ,2)::NUMERIC(5,2);

结果:

-123.45

答案 1 :(得分:0)

试试这个:

select cast(substr(a.field,1,3)||'.'||substr(a.field,4,2) AS DECIMAL(5,2))
from (select '12345' as field) a