强制十进制值,即使在oracle中为0

时间:2013-05-08 19:15:57

标签: oracle oracle11g decimal

我有一个存储版本信息的字段,例如1.1,1.2等。但是,它将4.0存储为4,5.0存储为5。

有没有办法强制它显示.0?

我尝试了NUMBER(5,3)和DECIMAL(5,3)数据类型,但都没有工作。

版本 - Oracle Database 11g企业版11.2.0.2.0版 - 64位生产

2 个答案:

答案 0 :(得分:7)

如果不需要,NUMBER列将永远不会存储小数值。

但是,您可以通过使用显式TO_CHAR来控制数据在将其转换为字符串时的显示方式,而不是依赖于隐式数据类型转换。例如,如果在9.0调用中使用格式掩码TO_CHAR,则生成的字符串将始终具有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,则无法区分这些版本。

答案 1 :(得分:0)

如果您需要在代码中隐藏此内容,请创建一个视图以隐藏这些详细信息。

然而,由于贾斯汀指出的原因,它将成为一个字符串。