请参阅我有一个像这样的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)
由于
答案 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