線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:8563
推到 Plurk!
推到 Facebook!

如何設定oracle保留數字轉字串後小數點前的0

答題得分者是:st33chen
junlin
初階會員


發表:66
回覆:94
積分:42
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-08-12 17:07:57 IP:220.133.xxx.xxx 訂閱
select 0.123 || '' from sys.dual  ==> .123
在執行上述SQL後, 會得到.123的字串, 但小數點前的0不見了,
我知道可以用to_char並加格式的方式補上0, 但這樣就會限制住數字的格式,
若用decode 或 case when, 則SQL就會變成很長很長.

不知道有沒方法可以設定oracle在數字轉字串後, 小數點前的0可以保留下來?
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-08-14 15:23:33 IP:122.116.xxx.xxx 未訂閱
您好,

format string 我還找到解答, 但是測了一下下面的 sql 句可行, 先參考一下

select DECODE(SUBSTR(TO_CHAR(0.123),1,1), '.','0') || TO_CHAR(0.123) from dual

------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
junlin
初階會員


發表:66
回覆:94
積分:42
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-08-14 19:57:19 IP:220.141.xxx.xxx 訂閱
我現在就是用這種作法, 只是覺得蠻笨的, 所以想問問有沒有其他解法  ^ ^
我是把這段寫成一個function, 但這樣SQL就會變的很長很長.
===================引 用 st33chen 文 章===================
您好,

format string 我還找到解答, 但是測了一下下面的 sql 句可行, 先參考一下

select DECODE(SUBSTR(TO_CHAR(0.123),1,1), '.','0') || TO_CHAR(0.123) from dual

st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-08-15 07:13:04 IP:122.116.xxx.xxx 未訂閱
1. sorry 提供了一個笨方法
2. 不懂您 "我是把這段寫成一個function, 但這樣SQL就會變的很長很長." 的意思

DECODE(SUBSTR(TO_CHAR(anum),1,1), '.','0') || TO_CHAR(anum)
寫成一個 stored function 假設為 to_char0
那 sql 就變成
select to_char0(0.123) from dual
為何會很長很長?
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2009-08-15 07:14:44, 註解 無‧
junlin
初階會員


發表:66
回覆:94
積分:42
註冊:2002-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-08-15 14:10:58 IP:220.141.xxx.xxx 訂閱
抱歉, 沒有不敬的意思, 
還是感謝你提供了這個方法, 這個方法我在GOOGLE上也有找到, 目前也是用這個方法,
只是覺得去判斷第1個char是不是小數點後再決定要不要加0, 這種方法蠻笨的, 但不可諱言的, 它的確可以解決我的問題,

我是覺得這種問題應該很多人以前就會遇到了, 不太可能是用這種解法吧.
不知道oracle有沒有參數可以直接設定, 就像是設定日期的格式一樣.

之所以會說SQL變很長, 是因為複雜的SQL時, 會多很多沒有意義的code(只是單純補0),
個人感覺有點影響可讀性, 例如:

select to_char0(col0) , to_char0(col1) , to_char0(col2) , to_char0(col3),
nvl(col4, to_char(col5), to_char0(col4))
from dual

===================引 用 st33chen 文 章===================
1. sorry 提供了一個笨方法
2. 不懂您 "我是把這段寫成一個function, 但這樣SQL就會變的很長很長." 的意思

DECODE(SUBSTR(TO_CHAR(anum),1,1), '.','0') || TO_CHAR(anum)
寫成一個 stored function 假設為 to_char0
那 sql 就變成
select to_char0(0.123) from dual
為何會很長很長?
cobraliu
中階會員


發表:15
回覆:75
積分:83
註冊:2007-11-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-11-23 23:14:35 IP:59.127.xxx.xxx 訂閱
隨然已經結案了,提供一下意見
如果你所要的東西是固定的,如你的資料是固定為
x.xxx,小數點之前補0,後面固定3碼,你可以用此方式

SELECT to_char(0.123,'0.999') FROM dual

此方法的缺點是如果後面不為3碼如

0.12,經上述會變 「0.120」
0.1,經上述會變「0.100」

算缺點吧,但如果以資料格式的對齊,那可能算優點了。
------
初學、初學、學了很久...還是在初學階段..Orz
系統時間:2018-01-20 8:51:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!