2013-05-08 24 views
0

0時,我有一個存儲版本信息的字段,如1.1,1.2等。但是,它將存儲4.0作爲4和5.0爲5力十進制值,即使在Oracle

有沒有辦法強制它顯示.0?

我已經嘗試了NUMBER(5,3)和DECIMAL(5,3)數據類型,但都沒有工作。

版本 - Oracle數據庫11g企業版發佈11.2.0.2.0 - 64位生產

回答

7

一個NUMBER柱將永遠保存十進制值,如果它並不需要。

但是,您可以通過使用顯式TO_CHAR而不是依靠隱式數據類型轉換來控制數據在顯示給用戶時如何顯示給用戶。例如,如果在TO_CHAR調用中使用格式掩碼9.0,則生成的字符串將始終有1個十進制數字。

SQL> select to_char(4, '9.0') 
    2 from dual; 

TO_C 
---- 
4.0 

SQL> ed 
Wrote file afiedt.buf 

    1 select to_char(4.1, '9.0') 
    2* from dual 
SQL>/

TO_C 
---- 
4.1 

話雖這麼說,似乎不太可能,你真的要存儲在NUMBER列軟件版本信息,而不是VARCHAR2。你大概沒有對這些數據進行任何數學運算,因此擁有NUMBER的大部分好處都不在表中。而軟件版本不是固有的數字。您經常發現自己想要兩個以上的組件(即Oracle 11.2.0.1)。而軟件版本往往對他們完成高度非數字化的事情。如果4.9之後的版本是4.10,那麼與4.0之後的版本4.1是非常不同的。但是,如果您使用NUMBER,則無法區分這些版本。

+0

我很擔心。感謝您的解決方案。 – hacket 2013-05-08 19:28:33

+1

@hacket - 還要注意'DECIMAL'和'NUMBER'是一回事。有一篇關於[這裏]的StackOverflow文章(http://stackoverflow.com/questions/11031409/decimals-p-or-numbers-p),它包含了對Oracle文檔的參考。如果您將列指定爲「DECIMAL」,Oracle會將其創建爲「NUMBER」。 – 2013-05-08 19:56:42

0

如果您需要將此代碼隱藏起來,請創建一個視圖來隱藏這些詳細信息。

然而,它會是一個字符串,出於同樣的原因賈斯汀指出。