【问题标题】:Oracle Number IssueOracle 编号问题
【发布时间】:2018-07-16 12:33:57
【问题描述】:

美好的一天,

我有一个问题需要你的帮助。

客户希望发票金额显示如下:

示例发票金额

-405.12 to be shown as 000000040512

&

-400.00 to be shown as 000000040000

以下查询适用于 405.12 金额,但对于 400.00 金额,它会删除右侧的两个零

LPAD(REPLACE((invoiceamt*-1),'.',''),12,0) 

我该如何解决这个问题?

谢谢你 亚伦

【问题讨论】:

  • 乘以 -100 而不是替换 . ?
  • 出于兴趣,+400.00 的发票金额如何显示?
  • 查询只返回负数的发票,所以不会返回+400.00

标签: sql oracle


【解决方案1】:

我建议

 to_Char(abs(invoiceamt) * 100, '000000000000')

在哪里

    abs  - absolute value - get rid of sign (-)
  * 100  - removing decimal point
to_Char  - final formatting (12 mandatory digits)

【讨论】:

    【解决方案2】:

    忘记替换,只需将 invoiceamt 乘以 -100,然后将 LPAD 乘以所需的长度。

    【讨论】:

    • 如此简单却又如此难。谢谢你,就像一个魅力。
    【解决方案3】:

    Another question让我想起了the V format model element的存在:

    返回一个乘以 10^n 的值(如果需要,向上取整),其中 nV 之后的 9 的个数。

    但是您可以使用零而不是 9 来保留前导零,并添加 FM 以删除前导空格(用于负值的 - 符号 - 您不会有)。所以你也可以这样做:

    with t (n) as (
      select -405.12 from dual
      union all select -400 from dual
    )
    select n, to_char(abs(n), 'FM0000000000V00') as result
    from t;
    
             N RESULT       
    ---------- -------------
       -405.12 000000040512 
          -400 000000040000 
    

    【讨论】:

      猜你喜欢
      • 2020-02-15
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      • 2020-03-17
      • 2020-02-26
      • 1970-01-01
      • 2012-09-16
      相关资源
      最近更新 更多