需求:
#將數字填充到對應金額單中 select substr(b.payMoney,length(b.payMoney),1) 分, substr(b.payMoney,length(b.payMoney)-1,1) 角, case when length(b.payMoney)-3 <=0 then '' else substr(b.payMoney,length(b.payMoney)-3,1) end 圓, case when length(b.payMoney)-4 <=0 then '' else substr(b.payMoney,length(b.payMoney)-4,1) end 拾, case when length(b.payMoney)-5 <=0 then '' else substr(b.payMoney,length(b.payMoney)-5,1) end 百, case when length(b.payMoney)-6 <=0 then '' else substr(b.payMoney,length(b.payMoney)-6,1) end 千, case when length(b.payMoney)-7 <=0 then '' else substr(b.payMoney,length(b.payMoney)-7,1) end 萬, case when length(b.payMoney)-8 <=0 then '' else substr(b.payMoney,length(b.payMoney)-8,1) end 十萬, case when length(b.payMoney)-9 <=0 then '' else substr(b.payMoney,length(b.payMoney)-9,1) end 百萬, case when length(b.payMoney)-10 <=0 then '' e end 億 from dual; lse substr(b.payMoney,length(b.payMoney)-10,1) end 千萬, case when length(b.payMoney)-11 <=0 then '' else substr(b.payMoney,length(b.payMoney)-11,1)
單據的樣式如下:
左邊是根據右邊的數字進行變換為對應的金額大寫,在上面的sql中我是用的是length(b.payMoney)獲取的數字長度,其中b.payMoney就是數據庫中查詢出來的一個數字,
這個sql最致命的問題就是如果最終查詢出來的數字是一個整數,即使我是用round/ceil/floor等保留小數的方式,最終得到的長度都不是想要的數據,默認將小數點后面的00去掉了
解決方案:
將其轉換成to_char(b.payMoney,'999999999.99');這樣寫前面的九個9表示小數點前面可以最多九位,小數點后的兩個9表示的是保留兩位,使用這個查詢出來的數據length()這個函數最終就沒有問題