力十进制值,即使在Oracle
问题描述:
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位生产
答
一个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
,则无法区分这些版本。
答
如果您需要将此代码隐藏起来,请创建一个视图来隐藏这些详细信息。
然而,它会是一个字符串,出于同样的原因贾斯汀指出。
我很担心。感谢您的解决方案。 – hacket 2013-05-08 19:28:33
@hacket - 还要注意'DECIMAL'和'NUMBER'是一回事。有一篇关于[这里]的*文章(http://*.com/questions/11031409/decimals-p-or-numbers-p),它包含了对Oracle文档的参考。如果您将列指定为“DECIMAL”,Oracle会将其创建为“NUMBER”。 – 2013-05-08 19:56:42