Oracle SQL中的数字格式

时间:2013-07-18 06:07:16

标签: sql oracle

我已经将数据从Oracle视图导出到固定长度的文本文件,但是我已经给出了如何将数据导出到文本文件的规范。即

quantity            NUM         (10)  
price               NUM         (8,2) 
participant_id      CHAR        (3)   
brokerage           NUM         (10,2)  
cds_fees            NUM         (8,2) 

我的混淆出现在数字类型中,当它说(8,2)时。如果我使用相同的文本,它是否有效意味着

10 characters (as to_char(<field name>, '9999999.99')) 

8 characters (as to_char(<field name>, '99999.99')) 

导出到文本文件中的固定长度文本字段时?

我正在看这个question,它提供了一个见解,但并非完整。

感谢有人可以用一些例子来启发我。

非常感谢。

3 个答案:

答案 0 :(得分:8)

根据Oracle docs on types

  

或者,您也可以指定精度(总位数)   和比例(小数点右边的位数):

     

如果未指定precision,则列将值存储为给定值。如果   没有指定比例,比例为零。

所以在你的情况下,NUMBER(8,2)已经得到了:

  • 总共8位数
  • 其中2个小数点后

这为您提供了-999999.99999999.99

的范围

答案 1 :(得分:4)

我认为你的意思是NUM的数据类型。

如果显示NUMBER(8,2),则表示 8位,并且该数字应四舍五入到最接近的百分数。这意味着之前会有6位数字,小数点后会有2位数字。

请参阅oracle doc

  

使用NUMBER数据类型存储定点或浮点数   数字。其幅度范围为1E-130 .. 10E125。如果是的价值   表达式超出此范围,您将获得数字溢出或   下溢错误。您可以指定精度,即总数   of数字和scale,它是右边的位数   小数点。语法如下:

     

NUMBER [(精度,小数)]

     

要声明要为其指定比例的定点数,请使用   以下表格:

     

NUMBER(精度,小数)

     

声明您无法指定的浮点数   精度或比例,因为小数点可以“浮动”到任何   位置,使用以下形式:

     

NUMBER

     

要声明没有小数点的整数,请使用以下格式:

     

NUMBER(精度) - 与NUMBER(精度,0)相同

     

您不能使用常量或变量来指定精度和比例;   你必须使用整数文字。 NUMBER值的最大精度   是38位小数。如果未指定精度,则默认为   38或系统支持的最大值,以较小者为准。

     

缩放,范围从-84到127,决定了舍入的位置   发生。例如,2轮的刻度到最接近的百分之一   (3.456变为3.46)。负比例向左转   小数点。例如,-3舍入到最近的比例   千(3456变成3000)。比例为0轮到最近的整数   数。如果未指定scale,则默认为0.

答案 2 :(得分:2)

NUMBER(p,s)
p(precision)  = length of the number in digits 
s(scale) = places after the decimal point

所以你的例子中的数字(8,2)是&#39; 999999.99&#39;

您可以看到更多示例here