我有0.8和0.80的數據。在我的選擇查詢中,我收到了錯誤的數據 示例
從雙重選擇0.80; 從雙重選擇0.8;Oracle - 爲什麼數字的前導零消失
都給出了0.8,但是我的期望是當值爲0.80時顯示o.80。 我發現所有的情況下0.90,0.70 ..... 如何實現這一
我有0.8和0.80的數據。在我的選擇查詢中,我收到了錯誤的數據 示例
從雙重選擇0.80; 從雙重選擇0.8;Oracle - 爲什麼數字的前導零消失
都給出了0.8,但是我的期望是當值爲0.80時顯示o.80。 我發現所有的情況下0.90,0.70 ..... 如何實現這一
select Ltrim(To_char(0.80, 'B999999999999999999990.99'), ' ') as bn from dual
在兩種情況下它都顯示0.80,但是在選擇Ltrim(To_char(0.8,'B999999999999999999990.99'),'')作爲bn的情況下,它只顯示0.8 rt。 –
0.8
,0.80
和0.80000
都是相同的號碼,但它們的格式不同。
號的甲骨文內部表示不會存儲你是如何格式化他們在輸入時如此0.8
,0.80
和0.8000
都將在數據庫中存儲爲數字0.8
舉行。
您正在返回一個數字而不是格式化的字符串,因此Oracle將返回0.8
並讓用戶界面(例如SQL/Plus)顯示它認爲合適的值。
如果你想與特定的格式(即始終保留兩位小數)的數量,那麼你將需要數轉換成一些其格式的字符串表示:
SELECT TO_CHAR(your_number, 'FM99999999990D00') FROM DUAL;
如果你想要的數字原始形式進入(具有前導和/或尾隨零),那麼你將需要存儲這些數字作爲字符串來維護格式:如果數據類型NUMBER(它是在select 0.8 from dual
對於爲例的
SELECT '0.8' FROM DUAL;
SELECT '0.80' FROM DUAL;
SELECT '00.8' FROM DUAL;
E),然後0.8和0.80是無法區分的 - 它們都存儲在內部的相同的方式dump
功能顯示:
with data (n) as
(select 0.8 from dual
union all
select 0.80 from dual
union all
select 0.800000 from dual
)
select n, dump(n) from data;
0.8 Typ=2 Len=2: 192,81
0.8 Typ=2 Len=2: 192,81
0.8 Typ=2 Len=2: 192,81
因此,有沒有辦法讓甲骨文以不同的方式顯示它們。如果您想要VARCHAR2字符串而不是NUMBER,請使用select '0.8' from dual
。
這是您的客戶的行爲。你使用哪個客戶端應用程序? –
順便說一句,這是一個「尾隨」零。 「前導」零位在字符串的左側。 –
'0.8'和'0.80'之間沒有數學上的區別。如果客戶端配置爲顯示尾隨零,則Oracle將以相同的方式將它們存儲起來,並且任何客戶端將以相同的方式顯示它們,具有相同數量的尾隨零。如果你想維護他們不同的小說,你需要存儲和顯示列作爲一個字符串。但那會是瘋狂的。 – APC