如何在Oracle SQL中除法整数以生成浮点数?
我刚刚开始学习Oracle SQL。我试图将两列如何在Oracle SQL中除法整数以生成浮点数?,sql,oracle,sqlplus,Sql,Oracle,Sqlplus,我刚刚开始学习Oracle SQL。我试图将两列numeric数据类型分开,我认为这是一个整数。我想在表或float数据类型中创建一个新列,将一个现有的numeric列除以一个整数,并将其值放入float列中。我将此代码用于划分和更新部分: update Student set AVERAGE = TOTAL/3; 这里,TOTAL是numeric列,AVERAGE是float。但当我使用以下方式打印表格时: select * from Student; ,平均值以除法的四舍五入值显示。我尝
numeric
数据类型分开,我认为这是一个整数。我想在表或float
数据类型中创建一个新列,将一个现有的numeric
列除以一个整数,并将其值放入float
列中。我将此代码用于划分和更新部分:
update Student set AVERAGE = TOTAL/3;
这里,TOTAL
是numeric
列,AVERAGE
是float
。但当我使用以下方式打印表格时:
select * from Student;
,平均值
以除法的四舍五入值显示。我尝试了在互联网上找到的两种解决方案:
update Student set AVERAGE = (TOTAL*1.00)/3;
以及:
但两者都不起作用。我做错了什么?
以下是我得到的输出:
ROLL_NO SNAME MATHS CHEM PHY TOTAL AVERAGE
---------- --------------- ---------- ---------- ---------- ---------- ----------
101 abcd 56 68 80 204 70
102 efgh 81 78 70 229 80
103 ijkl 69 73 78 220 70
104 mnop 90 89 92 271 90
105 qrst 80 89 79 248 80
这是一个有点长的评论 将根据该列的数据类型显示列
average
。Oracle将转换被除的“数字”,因此结果是准确的,我认为使用数字类型
您可以运行以下代码以查看除法结果始终相同:
select cast(10 as int) / cast(3 as int),
cast(10 as numeric) / cast(3 as numeric),
cast(10 as float) / cast(3 as float)
from dual;
因此,操作数的数据类型没有区别
另一方面,结果的数据类型不起作用。这些会产生不同的结果:
select cast(10 / 3 as int),
cast(10 / 3 as float),
cast(10 / 3 as number),
cast(10 / 3 as numeric(5, 1))
from dual;
这是一个有点长的评论 将根据该列的数据类型显示列
average
。Oracle将转换被除的“数字”,因此结果是准确的,我认为使用数字类型
您可以运行以下代码以查看除法结果始终相同:
select cast(10 as int) / cast(3 as int),
cast(10 as numeric) / cast(3 as numeric),
cast(10 as float) / cast(3 as float)
from dual;
因此,操作数的数据类型没有区别
另一方面,结果的数据类型不起作用。这些会产生不同的结果:
select cast(10 / 3 as int),
cast(10 / 3 as float),
cast(10 / 3 as number),
cast(10 / 3 as numeric(5, 1))
from dual;
首先,您需要了解Oracle中的
FLOAT
数据类型的含义
OracleFLOAT
数据类型是NUMBER
数据类型的子类型
Synatx:
浮动(p)
p是二进制位的精度
以下公式用于二进制和十进制之间的转换
精度:十进制=0.30103*二进制
现在,根据您得到的结果,我认为您的列(AVERAGE
)数据类型是FLOAT(1)
。
如果您需要更高的精度,那么您需要用更高精度的二进制值来修改您的表
让我们举一个例子:
CREATE TABLE TEST (
f1 FLOAT,
f2 FLOAT(1),
f3 FLOAT(4),
f4 FLOAT(7)
);
INSERT
INTO
TEST(
f1,
f2,
f3,
f4
)
VALUES(
10 / 3,
10 / 3,
10 / 3,
10 / 3
);
select * from TEST;
输出:
如果不提供任何精度,则Oracle将采用最大精度(126位)
-->37(十进制)
在上面的示例中,列f1、f2、f3和f4的数据类型是FLOAT、FLOAT(1)、FLOAT(4)和FLOAT(7)
列f1、f2的相应小数精度首先,您需要了解Oracle中的
FLOAT
数据类型的含义
OracleFLOAT
数据类型是NUMBER
数据类型的子类型
Synatx:
浮动(p)
p是二进制位的精度
以下公式用于二进制和十进制之间的转换
精度:十进制=0.30103*二进制
现在,根据您得到的结果,我认为您的列(AVERAGE
)数据类型是FLOAT(1)
。
如果您需要更高的精度,那么您需要用更高精度的二进制值来修改您的表
让我们举一个例子:
CREATE TABLE TEST (
f1 FLOAT,
f2 FLOAT(1),
f3 FLOAT(4),
f4 FLOAT(7)
);
INSERT
INTO
TEST(
f1,
f2,
f3,
f4
)
VALUES(
10 / 3,
10 / 3,
10 / 3,
10 / 3
);
select * from TEST;
输出:
如果不提供任何精度,则Oracle将采用最大精度(126位)
-->37(十进制)
在上面的示例中,列f1、f2、f3和f4的数据类型是FLOAT、FLOAT(1)、FLOAT(4)和FLOAT(7)
Oracle中的数据类型数字中的列f1、f2的相应精度(以十进制数字表示)已经是浮点类型。它的不同寻常之处在于它是一种以10为基数的浮点数类型,因此可以安全地用于涉及金钱的计算,但它仍然是一种浮点数类型 通过将子类型或特定字段定义为比例分量为0,可以定义仅包含整数的数字,例如:
nInt_value NUMBER(10,0);
或
在这种情况下,nInt_值
只能容纳10位或更少的整数
请注意,子类型仅在PL/SQL中可用-换句话说,您不能在PL/SQL模块中定义子类型,然后将其用作数据库字段 在Oracle中,
数字
数据类型已经是浮点类型。它的不同寻常之处在于它是一种以10为基数的浮点数类型,因此可以安全地用于涉及金钱的计算,但它仍然是一种浮点数类型
通过将子类型或特定字段定义为比例分量为0,可以定义仅包含整数的数字,例如:
nInt_value NUMBER(10,0);
或
在这种情况下,nInt_值
只能容纳10位或更少的整数
请注意,子类型仅在PL/SQL中可用-换句话说,您不能在PL/SQL模块中定义子类型,然后将其用作数据库字段 表说明?您真的想要浮点吗?或者只是精确到小数点的数字结果?我从未见过Oracle中需要数据类型的情况。该文档说明,它是为了兼容性而提供的,并建议您改用
binary\u float
或binary\u double
。我也从来没有看到有必要这样做。你为什么需要浮点数
?我认为numeric
是Integers
@ShantanuShinde的替代词是的,尽管numeric
是number
的替代词,几乎总是用于任何数值。阅读.descripp表上的文档部分