我正在嘗試將金額的小數點轉換為逗號。我使用了下面的查詢:
select tax_amt
, to_char(tax_amt, '999999999999999999999999999999999999999990D00', 'NLS_NUMERIC_CHARACTERS='', ''') comma
from (
select 9.99 tax_amt from dual union all
select 99.99 tax_amt from dual union all
select 999.99 tax_amt from dual union all
select 9999.99 tax_amt from dual union all
select 99999.99 tax_amt from dual union all
select 999999.99 tax_amt from dual union all
select 9999999.99 tax_amt from dual union all
select 99999999.99 tax_amt from dual union all
select 999999999.99 tax_amt from dual union all
select 9999999999.99 tax_amt from dual union all
select 99999999999.99 tax_amt from dual)
結果似乎是正確的:
tax_amt zzz
-------- ----------
9.99 9,99
99.99 99,99
999.99 999,99
9999.99 9999,99
99999.99 99999,99
999999.99 999999,99
9999999.99 9999999,99
99999999.99 99999999,99
999999999.99 999999999,99
9999999999.99 9999999999,99
99999999999.99 99999999999,99
但是,是否可以使格式999999999999999999999999999999999999999990D00動態化?
uj5u.com熱心網友回復:
Oracle number(假設是這樣tax_amt)只能具有 38 位精度。實際上,您似乎不太可能真的需要使這種動態——美國聯邦預算每年略低于 5 萬億美元。如果你tax_amt的資金足以資助整個美國政府一整年,那么它的小數點前只有 12 位。如果您構建一個格式掩碼,例如,小數點前 15 位,那么您就有空間處理下個世紀左右的美國預算,具體取決于通貨膨脹。這似乎綽綽有余。
但從技術上講,當然。您可以運行單獨的查詢以獲取列中的最大值tax_amt,然后通過將lpad“9”輸出到該值的長度來創建格式字串。這似乎不是特別值得,但你可以做到。
uj5u.com熱心網友回復:
您可以使用RPAD()類似的功能
TO_NUMBER(tax_amt,
RPAD(REGEXP_SUBSTR(tax_amt,'[^ .]'),LENGTH(tax_amt),'9')||'0D00',
'NLS_NUMERIC_CHARACTERS=''.,''') AS money
或者在你的情況下直接使用TO_CHAR()轉換
TO_CHAR(tax_amt,
RPAD(REGEXP_SUBSTR(tax_amt,'[^ .]'),LENGTH(tax_amt),'9')||'0D00',
'NLS_NUMERIC_CHARACTERS='', ''') AS comma
Demo
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/414338.html
標籤:
下一篇:主鍵違規問題oracledb
