以下的文章主要是講述Oracle小數點的實際保留問題如果你有相關的業務清單有提取要求的話我們需要使用到百分率通常的情況下需要對其保留兩位小數其實我們只用round就可以實現(round(_data) )但是格式不是很工整
對格式要求不嚴謹的情況下使用round即可以下是網絡搜索到的處理方法
方法一使用to_char的fm格式即
to_char(round(dataamount)FM) as amount
不足之處是如果數值是的話會顯示為而不是
另一需要注意的是格式中Oracle小數點左邊的個數要夠多否則查詢的數字會顯示為n個符號#
解決方式如下
select decode(salary(to_char(round(salary)fm))) from can_do;
方法二使用case when then else end進行各種情況的判斷處理
case
when instr(to_char(dataamount) ) < then
dataamount ||
when instr(to_char(dataamount) ) + = length(dataamount) then
dataamount ||
else
to_char(round(dataamount ))
end as amount_format
方法三可以使用Oracle自帶的參數設置即
lumn amount format l
此方法的不足是format中的Oracle小數點左面的的個數要已知否則會出現超過的數字顯示為########的情況
另外一個問題是使用column時設置生效是session級還是system級需要注意
也許某張表的數值列不總是要求所有的地方顯示時都是Oracle小數點後兩位的格式
此時只能使用session級但是有個數據庫連接會話超時的問題如果不是使用到system級不建議使用該方法
方法四使用to_char+trim的方式如下
select trim(to_char()) from dual;
或者
select ltrim(trim(to_char())) from dual;
此處使用了個或者個的格式建議使用個的方式方便些方法四的不足之處是
如果數值是的話轉化之後為而不是補救措施是decode一下
另一需要注意的是格式中Oracle小數點左邊或者的個數要夠多負責查詢的數字會顯示為n個符號#
如下
select decode
(salarytrim(to_char(salary))) from can_do;
或者
select decode
(salaryltrim(trim(to_char(salary)))) from can_do;
結論建議使用方法四中的trim+to_char的方式或者方法一的補救之後的方式而且最好使用Oracle小數點左邊n個的方式不要使用的方式否則要多一步trim處理
即
select decode(salary
trim(to_char(salary))) from can_do;
或者
select decode(salary
(to_char(round(salary)fm))) from can_do;
以上的相關內容就是對Oracle小數點的保留問題的介紹望你能有所收獲
From:http://tw.wingwit.com/Article/program/Oracle/201311/18607.html