簡體   English   中英

十進制數,to_char和Oracle

[英]Decimal number, to_char, and Oracle

我試圖找出to_char()的格式規范,它會給我以下結果。

to_char(0.1, '[FORMAT_SPEC]')

給出0.1和:

to_char(1, '[FORMAT_SPEC]')

給出1。

我嘗試過以下解決方案:

to_char(0.1)

給'.1'。

to_char(0.1, 'FM0.099')

給出0.1,這沒關系,但是:

to_char(1, 'FM0.099')

給出1.0,這是不行的。

你有什么建議嗎?

返回的精度需要保持一致,因此唯一的選擇是使用DECODECASE語句有條件地返回您需要的內容:

CASE 
  WHEN INSTR(TO_CHAR(t.col), '.') = 0 THEN TO_CHAR(t.col)
  ELSE TO_CHAR(t.col, 'FM0.099')
END

示例並不是很好 - 不清楚您的數據是否具有1.000或者值1.000值。

編輯Michael-O(2013-06-25):對於那些需要它的人,你可以試試:

case
  when instr(to_char(<col>), (select to_char(0, 'FMD') from dual))  = 0
    then to_char(<col>) 
  else to_char(<col>, 'FM999990D999')
end

它會自動觀察小數分隔符。 將secodn格式模式調整為您的數字大小。

我只是用這個:

TRIM('.' FROM TO_CHAR(x, 'FM99990.999'))

不要碰巧有一個Oracle實例來測試這個,但我想是的

TO_CHAR(1, 'FM0.999')

oughta做到了。

不確定你期望的值的范圍,但你可以將值<1對比那些> = 1.否則尾隨的0或小數將會妨礙你:

select val,
       case when val < 1 then to_char(val, 'FM99990.9')
            else to_char(val, 'FM99999')
       end fmt
  from (select 0.1 val from dual union all
        select 1 from dual
       )
/

       VAL FMT
---------- --------
        .1 0.1
         1 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM