[英]How to convert number to char without decimal dot using Oracle TO_CHAR()
[英]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,這是不行的。
你有什么建議嗎?
返回的精度需要保持一致,因此唯一的選擇是使用DECODE或CASE語句有條件地返回您需要的內容:
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.