激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Oracle - oracle保留兩位小數解決方案

oracle保留兩位小數解決方案

2019-11-14 18:45oracle教程網 Oracle

公司需要處理一些報表,需要使用百分率,保留2位小數,只用round和trunc函數都可以實現(round(_data,2) ),只是格式不是很工整,對格式要求不嚴謹的情況下使用round即可

公司需要處理一些報表,需要使用百分率,保留2位小數,只用round和trunc函數都可以實現(round(_data,2) ),只是格式不是很工整,對格式要求不嚴謹的情況下使用round即可. 

個人認為比較方便的一種 
select decode(n_jg,0,'0.00',trim(to_char(n_jg,'9999999.99'))) from tbl 
如果只是檢索,可是使用: 
1、select trunc(CUR_SUM,2) from data_record; 
將小數轉化成百分比=> round(zcbj/zs*100)||'%' ==trunc((zcbj/zs),2)*100||'%' 
2、如果想更新數據,可以使用: 
update data_record set CUR_SUM=trunc(CUR_SUM,2) where REC_NO=123 

方法一:使用to_char的fm格式 
to_char(round(data.amount,2),'FM9999999999999999.00') as amount 
不足之處是,如果數值是0的話,會顯示為.00而不是0.00。 
另一需要注意的是,格式中小數點左邊9的個數要夠多,否則查詢的數字會顯示為n個符號“#”。 
解決方式如下: 
select decode(salary,0,'0.00',(to_char(round(salary,2),'fm99999999999999.00'))) from can_do; 

方法二:使用case when then else end進行各種情況的判斷處理 
case 
when instr(to_char(data.amount), '.') < 1 then 
data.amount || '.00' 
when instr(to_char(data.amount), '.') + 1 = length(data.amount) then 
data.amount || '0' 
else 
to_char(round(data.amount, 2)) 
end as amount_format 

方法三:可以使用Oracle自帶的參數設置 
column amount format l9999999999.99 
此方法的不足是,format中的小數點左面的9的個數要已知,否則會出現超過的數字顯示為########的情況。 
另外一個問題是,使用column時,設置生效是session級還是system級,需要注意。 
也許某張表的數值列不總是要求所有的地方顯示時,都是小數點后兩位的格式,此時只能使用session級,但是有個數據庫連接會話超時的問題,如果不是使用到system級,不建議使用該方法。 

方法四:使用to_char+trim的方式 
select trim(to_char(1234,'99999999999999.99')) from dual; 
或者 
select ltrim(trim(to_char(1234.525,'00000000000000.00')),'0') from dual; 
此處使用了14個9或者14個0的格式,建議使用14個9的方式,方便些。方法四的不足之處是: 
如果數值是0的話,轉化之后為.00而不是0.00,補救措施是,decode一下。 
另一需要注意的是,格式中小數點左邊9或者0的個數要夠多,負責查詢的數字會顯示為n個符號“#”。 
如下: 
select decode(salary,0,'0.00',trim(to_char(salary,'99999999999999.99'))) from can_do; 
或者 
select decode(salary,0,'0.00',ltrim(trim(to_char(salary,'00000000000000.00')),'0')) from can_do; 
結論:建議使用方法四中的trim+to_char的方式或者方法一的補救之后的方式,而且最好使用小數點左邊n個9的方式,不要使用0的方式,否則,要多一步trim處理。 
即:select decode(salary,0,'0.00',trim(to_char(salary,'99999999999999.99'))) from can_do; 
或者 
select decode(salary,0,'0.00',(to_char(round(salary,2),'fm99999999999999.00'))) from can_do;

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 31freehdxxxx欧美| 黄污网址 | 欧美日韩亚州综合 | 美女久久久久久久久 | 免费观看黄视频 | 成人在线观看一区 | 久久综合伊人 | 真人一级毛片免费 | 日本成人一区二区 | 一级黄色毛片a | 久久电影一区二区 | 毛片在哪里看 | 午夜国产在线观看 | 在线天堂资源 | 免费黄色小网站 | 日韩视频一 | 欧美日韩在线视频观看 | 国产精品久久久久久久不卡 | 成人在线视频免费 | 一区二区久久久久草草 | 免费看欧美一级特黄a毛片 九色com | 一区二区三区手机在线观看 | 久久久久久亚洲国产精品 | 午夜精品视频在线 | 性高湖久久久久久久久aaaaa | 一区二区美女视频 | 国产一区二区高清在线 | 欧洲色阁中文字幕 | 成人福利软件 | 性插视频 | 日韩一级网站 | 国产第一页精品 | 天堂精品在线 | 99精品视频在线导航 | 国产精品爱久久久久久久 | 亚洲人成中文字幕在线观看 | 欧美精品一区二区三区在线 | 性aaa| 狼人狠狠干 | 亚洲精品欧美二区三区中文字幕 | 欧美一级高清免费 |