我刚刚开始学习Oracle SQL。我想将两列numeric
数据类型划分为一个整数。我想在表或float
数据类型中创建一个新列,将现有numeric
列除以整数,然后将其值放入该float
列中。我将这段代码用于除法和更新部分:
update Student set AVERAGE = TOTAL/3;
在这里,TOTAL
是numeric
列,AVERAGE
是float
。但是当我使用以下命令打印表格时:
select * from Student;
,AVERAGE
显示为除法的舍入值。我尝试了两种在互联网上找到的解决方案:
update Student set AVERAGE = (TOTAL*1.00)/3;
和:
update Student set AVERAGE = cast(TOTAL as float(2))/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
Tejash.. 5
首先,您需要了解FLOAT
Oracle中的数据类型的含义。
Oracle
FLOAT
数据类型是数据类型的子NUMBER
类型。Synatx:
浮点数(p)
p是二进制位的精度。
以下公式用于在二进制精度和十进制精度之间进行转换:十进制= 0.30103 *二进制
现在,根据您得到的结果,我认为您的column(AVERAGE
)数据类型为FLOAT(1)
。如果需要更高的精度,则需要在Binary中以更高的精度值更改表。
让我们举个例子:
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;
输出:
db <> fiddle演示
如果不提供任何精度,则Oracle将采用最大精度(126位-> 37位十进制)。
在上面的示例中,列f1,f2,f3和f4的数据类型为FLOAT,FLOAT(1),FLOAT(4)和FLOAT(7)。
f1,f2 <-(您的情况),f3和f4 列的十进制精度为37(126 * 0.30103),1(1 * 0.30103)<-(您的情况),2(4 * 0.30103) )和3(7 * 0.30103)。
因此,结论是 -> 根据您的要求更改表并更改AVERAGE
列的FLOAT
数据类型的精度。
干杯!!
首先,您需要了解FLOAT
Oracle中的数据类型的含义。
Oracle
FLOAT
数据类型是数据类型的子NUMBER
类型。Synatx:
浮点数(p)
p是二进制位的精度。
以下公式用于在二进制精度和十进制精度之间进行转换:十进制= 0.30103 *二进制
现在,根据您得到的结果,我认为您的column(AVERAGE
)数据类型为FLOAT(1)
。如果需要更高的精度,则需要在Binary中以更高的精度值更改表。
让我们举个例子:
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;
输出:
db <> fiddle演示
如果不提供任何精度,则Oracle将采用最大精度(126位-> 37位十进制)。
在上面的示例中,列f1,f2,f3和f4的数据类型为FLOAT,FLOAT(1),FLOAT(4)和FLOAT(7)。
f1,f2 <-(您的情况),f3和f4 列的十进制精度为37(126 * 0.30103),1(1 * 0.30103)<-(您的情况),2(4 * 0.30103) )和3(7 * 0.30103)。
因此,结论是 -> 根据您的要求更改表并更改AVERAGE
列的FLOAT
数据类型的精度。
干杯!!