Oracle编号问题

时间:2018-07-16 12:33:57

标签: sql oracle

早安,

我有一个问题可以帮助您。

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

示例发票金额

-405.12 to be shown as 000000040512

-400.00 to be shown as 000000040000

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

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

我该如何解决这个问题?

谢谢 亚伦

3 个答案:

答案 0 :(得分:7)

我建议

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

其中

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

  

返回一个乘以10 ^ n 的值(如有必要,将其四舍五入),其中 n V之后的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