【问题标题】:How to convert a COBOL string with implied decimal to decimal type in Netezza?如何在 Netezza 中将隐含十进制的 COBOL 字符串转换为十进制类型?
【发布时间】:2014-11-18 16:27:40
【问题描述】:

看看我有一个像这样的 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

有谁知道在 Netezza 中将 '12345' 转换回十进制 (5,2) 的更好方法?

谢谢

【问题讨论】:

    标签: sql netezza


    【解决方案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

    【讨论】:

      【解决方案2】:

      试试这个:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-25
        • 2014-04-28
        • 1970-01-01
        • 2015-02-06
        • 2019-07-27
        • 2022-07-22
        • 1970-01-01
        相关资源
        最近更新 更多