記錄oracle中查詢資料0.xx結果為.xx的解決辦法

Homie發表於2018-11-12

由於業務需要,把本來的varchar2轉換成了number(22,2),其中有一個欄位儲存的是0.xx型別的資料。問題來了,今天再次查詢發現資料庫中儲存的是0.01,但是查詢結果是.01,開始以為是程式碼問題,排查後發現問題在於bean中是string,在查詢對映轉換中把前面的0省略掉了(度娘說是儲存時為了節省空間,可是表裡會什麼沒有省略0呢?查詢做char轉換才省略?)
網上搜到了幾種解決辦法:
1)select to_char(rate) from mytest;

記錄oracle中查詢資料0.xx結果為.xx的解決辦法
select regexp_replace(rate,'^.','0.')as rate from mytest;

記錄oracle中查詢資料0.xx結果為.xx的解決辦法
這裡採用了oracle裡的正規表示式函式regexp_replace,詳情參考https://www.cnblogs.com/SummerinShire/p/6182773.html
2)select case when rate like '.%' then '0'||rate else to_char(rate) end from mytest;

記錄oracle中查詢資料0.xx結果為.xx的解決辦法
3)select decode(substr(rate,1,1),'.','0'||rate,rate) from mytest;

記錄oracle中查詢資料0.xx結果為.xx的解決辦法
通過substr函式將第一位擷取出來,如果和點.匹配,則前面拼接0,否則就等於它 自己。decode(a,b,c,d),解釋:如果a和b相等,就輸出c,否則輸出d。decode函式還有其他的用法,自行研究。
4) select to_char(rate,'fm9999990.9999') from mytest;

記錄oracle中查詢資料0.xx結果為.xx的解決辦法
直接利用to_char函式進行格式化,格式化規則自行研究。

猜想:前面說的為什麼資料庫中顯示的是0.22,我覺得實際儲存應該 還是0.22,只是在查詢中做了隱是式轉換,程式碼底層把number類轉換成了string.通過substring函式擷取第一位是點不是0,可能是在subtrings時就已經先to_char把number轉了型別。。

相關文章