<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

    業精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
    小數點前的0的顯示問題
    ?
    ?
    ??? 在處理數據時發現一個問題,Oracle對于小于1的小數,小數點前面的0是不顯示的。這個問題遇到的很普遍,解決的方法也挺多的。大致上研究了一下這個問題,提供了用to_char和decode函數來解決這個問題的兩種方法。先來看一下這個問題:
    ?
    ?
    SQL> create table t1_number (num number);
    Table created
    ?
    SQL> insert into t1_number values(0.3268);
    1 row inserted
    ?
    SQL> insert into t1_number values(0.57965686);
    1 row inserted
    ?
    SQL> insert into t1_number values(52345234.5686);
    1 row inserted
    ?
    SQL> insert into t1_number values(4.552686);
    1 row inserted
    ?
    SQL> commit;
    Commit complete
    ?
    SQL> column num format 99999999999.9999999999999
    SQL> select * from t1_number;
    ?
    ?????????????????????? NUM
    --------------------------
    ??????????? .3268000000000
    ??????????? .5796568600000
    ??? 52345234.5686000000000
    ?????????? 4.5526860000000
    ?
    ?
    ?
    ??? 使用PL/SQL DEV工具查看時是有前面的0的
    ??? 通過column num format 000000000000.99999999999設置也可以顯示前面的0
    ?
    ??? 但是這些都只是顯示的結果,而不是數據庫保存結果
    ?
    SQL> column num format 00000000000.9999999999999
    SQL> select * from t1_number;
    ?
    ?????????????????????? NUM
    --------------------------
    00000000000.3268000000000
    00000000000.5796568600000
    00052345234.5686000000000
    00000000004.5526860000000
    00000000005.2920000000000
    ?
    SQL> select substr(num,1,1) from t1_number;
    ?
    SU
    --
    .
    .
    5
    4
    5
    ?
    ??? 可以看到,無論前面出現多少位,通過substr函數獲取的第一位任然是'.'
    ?
    ?
    ??? 無論怎么轉換,只要最終輸出結果是數值型的,小數點前的0必然被丟棄,所以只有將數值轉換為字符型,大致有兩種方法:
    ?
    ?
    1、直接使用to_char函數
    ?
    ??? 首先實驗一下將小數點前和小數點后都加上99999999的格式:
    ?
    SQL> select to_char(num,'999999999.999999999') from t1_number;
    ?
    TO_CHAR(NUM,'9999999
    --------------------
    ????????? .326800000
    ????????? .579656860
    ? 52345234.568600000
    ???????? 4.552686000
    ???????? 5.292000000
    ?
    ??? 發現小數點前還是沒有0,而小數點后的0多出來了
    ??? 再實驗一下小數點前和小數點后都加上0000000000格式:
    ?
    SQL> select to_char(num,'00000000000.000000000') from t1_number;
    ?
    TO_CHAR(NUM,'000000000
    ----------------------
    00000000000.326800000
    00000000000.579656860
    00052345234.568600000
    00000000004.552686000
    00000000005.292000000
    ?
    ??? 發現小數點前是有0了,但是兩邊的0都多出來了,使用FM來去掉多于的0:
    ?
    SQL> select to_char(num,'fm00000000000.000000000') from t1_number;
    ?
    TO_CHAR(NUM,'FM0000000
    ----------------------
    00000000000.326800000
    00000000000.579656860
    00052345234.568600000
    00000000004.552686000
    00000000005.292000000
    ?
    ??? 沒有效果,說明FM只能去掉用9表示的格式中產生的0:
    ?
    SQL> select to_char(num,'fm999999999.999999999') from t1_number;
    ?
    TO_CHAR(NUM,'FM99999
    --------------------
    .3268
    .57965686
    52345234.5686
    4.552686
    5.292
    ?
    ??? 但是這樣還是沒有0,最后發現可以將小數點前的第一位置為0即可(注意9的個數要大于數值的位數):
    ?
    SQL> select to_char(num,'fm999999990.999999999') from t1_number;
    ?
    TO_CHAR(NUM,'FM99999
    --------------------
    0.3268
    0.57965686
    52345234.5686
    4.552686
    5.292
    ?
    ??? 檢查一下第一位,沒有問題:
    ?
    SQL> select substr(to_char(num,'fm999999990.999999999'),1,1) from t1_number;
    ?
    SU
    --
    0
    0
    5
    4
    5
    ?
    2、使用decode函數
    ?
    ??? 既然小于1的小數首位必然是'.',那就判斷首位是否為'.',是則在前面加上'0'即可
    ?
    SQL> select decode(substr(num,1,1),'.','0'||num,num) from t1_number
    ?

    DECODE(SUBSTR(NUM,1,1),'.','0'||NUM,NUM)
    -----------------------------------------
    0.3268
    0.57965686
    52345234.5686
    4.552686
    5.292
    ?
    ??? 同樣檢查一下第一位,沒有問題
    ?
    SQL> select substr(decode(substr(num,1,1),'.','0'||num,num),1,1) fro
    m t1_number;
    ?
    SU
    --
    0
    0
    5
    4
    5
    ?
    ?
    ??? 也可以寫個函數來判斷一下,不過可以用decode直接出來,感覺也沒什么必要,暫時就這些吧。
    ?
    ?
    posted on 2008-10-29 21:12 decode360 閱讀(771) 評論(0)  編輯  收藏 所屬分類: 05.SQL
    主站蜘蛛池模板: 久久亚洲国产精品五月天婷| 国产成人精品免费视频网页大全| AV片在线观看免费| 亚洲最大黄色网址| 国产精品入口麻豆免费观看| 亚洲午夜国产精品无卡| 99无码人妻一区二区三区免费 | 亚洲成AV人片一区二区密柚| a级黄色毛片免费播放视频| 亚洲第一网站免费视频| 亚洲国产精品第一区二区三区| 美女被爆羞羞网站在免费观看| yy6080亚洲一级理论| 亚洲第一网站免费视频| 青春禁区视频在线观看直播免费| 亚洲一区二区无码偷拍| 亚洲AⅤ优女AV综合久久久| 国产免费久久久久久无码| 亚洲AV人人澡人人爽人人夜夜| 亚洲av日韩av永久在线观看| 亚洲乱妇熟女爽到高潮的片| 女人18毛片水真多免费看| 亚洲人成网站999久久久综合| 国产裸模视频免费区无码| jizz免费观看视频| 亚洲视频在线免费观看| 免费高清A级毛片在线播放| 亚洲一区日韩高清中文字幕亚洲 | 亚洲精品中文字幕麻豆| 毛片免费在线视频| 成人免费视频一区二区| 77777_亚洲午夜久久多人| 老司机永久免费网站在线观看| A级毛片成人网站免费看| 亚洲国产精品专区| 国产精品亚洲产品一区二区三区 | 色偷偷噜噜噜亚洲男人| 相泽亚洲一区中文字幕| 无码中文在线二区免费| 成人免费av一区二区三区| 一本久久免费视频|