今天有人问我,他把字段类型设计成float(2)后,插入数据93.5,后,为什么变成了90? 为了说明这个问题,我们先来看一段话(http://www.cnoug.org/viewthread.php?tid=56643):Oracle Online Help 说:FLOAT(b) specifies a floating-point number with binary precision b. The precision b can range from 1 to 126. To convert from binary to decimal precision, multiply b by 0.30103。 根据这段话,我们可以看到,float(2)中的2是一个binary precision,而不是我们常用的decimal precision。他们之间的换算关系是:binary precision=int(b*0.30103),因此我们这里实际上的精度应该等于int(2*0.30103)=0,即小数点后精度为0。 回到我们原来的问题,93.5化成浮点型9.35*10^1,这时9.35小数点后精度为0,成9,因此最后变成9*10^1=90。 类似的,我们可以设计成float(10),那么int(10*0.30103)=3,因此,如果插入93.5,就得出9.35--精度为3-->9.350,9.350*10^1=93.5。如果插入13884.2,得出1.38842--精度为3-->1.388,1.388*10^4=13880。 我们可以从以下测试更加清楚的看到这样的换算规则。 Connected to Oracle9i Enterprise Edition Release 9.0.1.1.1 SQL> Table created SQL> INSERT INTO hjm_float_test(a,b,c,d) VALUES(93.5,93.5,93.5,93.5); 1 row inserted SQL> INSERT INTO hjm_float_test(a,b,c,d) VALUES(93.665,93.665,93.665,93.665); 1 row inserted SQL> INSERT INTO hjm_float_test(a,b,c,d) VALUES(96.5,96.5,96.5,96.5); 1 row inserted SQL> INSERT INTO hjm_float_test(a,b,c,d) VALUES(13884.2,13884.2,13884.2,13884.2); 1 row inserted SQL> COMMIT; Commit complete SQL> SELECT * FROM hjm_float_test; A B C D SQL> desc hjm_float_test; SQL> 请特别注意的是,虽然我在设计表的时候设计成了float(2)、float(10),但是当我在desc表(代码最后7列)的时候却是看不到这样的设计结构的,这样的问题需要尤其引起注意!! 最后,让我们回顾一下,记住float(b)中的b是二进制的精度,他的换算规则是binary precision=int(b*0.30103)。
Connected as aspire
SQL> CREATE TABLE hjm_float_test
2 (a FLOAT(2),
3 b FLOAT(10),
4 c FLOAT,
5 d NUMBER);
---- ------------ -------------------------------------------------------------------------------- ----------
90 93.5 93.5 93.5
90 93.67 93.665 93.665
100 96.5 96.5 96.5
1000 13880 13884.2 13884.2
Name Type Nullable Default Comments
---- ------ -------- ------- --------
A FLOAT Y
B FLOAT Y
C FLOAT Y
D NUMBER Y
发表评论
-
Oracle ITL(事务槽)
2013-07-10 10:14 2424ITL描述: ITL(Interested Transac ... -
【转】Oracle TM锁 TX锁
2013-05-12 23:42 1445转自RuleV5:http://blog.csdn.net/ ... -
【转】Oracle: sqlnet.ora、listener.ora、tnsnames.ora的配置
2013-05-07 22:29 902转自 http://blog.csdn.net/wenlel ... -
v$parameter, v$parameter2, v$system_parameter, v$system_parameter2, v$spparamete
2013-05-07 15:05 1323转自:http://blog.csdn.net/huang_ ... -
SQL 连接(左连接,右连接,全连接,内连接,交叉连接,自连接) (转)
2013-02-02 23:10 1033最近公司在招人,同事问了几个自认为数据库可以的应聘者关于库连 ... -
Oracle 回收站 (转)
2013-02-01 17:19 817我们都比较熟悉windows中的回收站,文件删除后放到回收 ... -
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
2011-03-13 14:02 747近日在配置Oracle 10G的 ... -
ORA-28000: the account is locked
2011-03-12 19:36 1806迁移项目,一切弄完后启动服务器,Hibernate报错:OR ... -
ORA-01578: ORACLE 数据块损坏 一种解决方案 (转)
2011-03-11 15:32 31474os: winxp db: 10g r2 错误提 ... -
oracle的备份与恢复 (转)
2011-03-11 14:28 1193oracle中的不使用rman的备 ... -
oracle 存储结构
2011-03-10 13:33 1840总体来说oracle的逻辑结构和物理结构是由块、区、段 ... -
pctused, pctfree, pctincrease , 行迁移 & 行链接 (转)
2011-03-09 19:48 1457关于pctincrease与空间 ... -
表空间管理 用户管理 日志文件管理
2011-03-08 14:09 8011、表空间管理和用户管理 --创建数据表 ... -
oracle initrans maxtrans
2011-03-07 10:35 4015initrans用于对数据块的行级并行操作的控制。首先介绍事 ... -
oracle analyze table(转)
2011-03-04 16:19 1540首先创建四个临时表t1 ... -
oracle 高水位线(转)
2011-03-04 14:30 2544高水位线实验: -- 创建test3表 SQL> cre ... -
Oracle SQL 优化 (转)
2011-03-03 15:16 706Oracle SQL的优化规则: 尽量少用IN操作符,基本上所 ... -
EXECUTE IMMEDIATE用法小解(转)
2011-03-03 14:33 666EXECUTE IMMEDIATE 代替了以前Oracle8i ... -
Oracle distinct的用法(转)
2011-03-03 09:37 834distinct这个关键字来过滤掉多余的重复记录只 ... -
oracle10g PGA 管理(转)
2011-02-24 09:59 1613一、概述 SGA,PGA,UGA都是Oracle管理的 ...
相关推荐
索引方面,Oracle支持函数索引、位图索引等,而MySQL主要使用B-Tree索引,但在5.7及以上版本中引入了InnoDB的函数索引。在处理大量数据时,理解这些差异对优化查询性能至关重要。 视图和表连接也是两个数据库系统的...
'FLOAT', 'FLOAT', 'NUMBER', CASE WHEN (b.DATA_LENGTH = 22 AND b.DATA_SCALE = 0) THEN 'INTEGER' ELSE 'NUMBER(' || b.DATA_LENGTH || ',' || b.DATA_SCALE || ')' END, 'RAW', 'RAW(' || b.DATA_LENGTH ...
// B. 创建新数据库连接 con = DriverManager.getConnection(getConnectionUrl(), userName, password); // C. 从源SQL Server数据库读取数据 Statement stmt = con.createStatement(); ResultSet rs = stmt....
SYBASE iq中可以使用SELECT语句来计算同期值,例如:SELECT A.ID,A.CALC_MONTH,A.NUM,B.TQ_NUM FROM (SELECT A.ID,A.CALC_MONTH,NUM FROM) A LEFT JOIN (SELECT B.ID,B.CALC_MONTH,TQ_NUM FROM) B ON A.ID=B.ID AND ...
通过`TO_CHAR`函数,用户能够将数字(`NUMBER`, `BINARY_FLOAT`, 或者 `BINARY_DOUBLE`类型)转换为`VARCHAR2`类型的字符串,并按照预定义的格式展示出来。下面我们将详细介绍`TO_CHAR`函数中的各种格式化符号及其...
4. **索引**:Oracle SQL支持多种类型的索引,包括B树索引、位图索引和函数索引。索引可以显著提高查询性能,但也需要考虑维护和空间占用。 5. **视图**:视图是虚拟表,由一个或多个表的查询结果组成。它们可以...
FROM dbo.[Scores] A JOIN [Student] B ON (A.StuNo = B.ID) GROUP BY StuName ORDER BY StuName ASC; ``` ##### 3. 使用 `PIVOT` 实现行转列 `PIVOT`操作提供了一种更简洁的方法来实现行转列,尤其是在字段...
1. **数据类型**:Oracle支持多种数据类型,如CHAR、VARCHAR2、NUMBER、DATE、BINARY_FLOAT、BINARY_DOUBLE等。了解并正确使用这些数据类型对于存储和处理数据至关重要。 2. **SQL语句**:SQL是查询和管理Oracle...
- **数字类型**:如NUMBER和BINARY_FLOAT/BINARY_DOUBLE。 - **字符类型**:如VARCHAR2、CHAR和CLOB。 - **日期/时间类型**:如DATE和TIMESTAMP。 4. **索引和约束** - **索引类型**:包括B-tree、位图和反向键...
Oracle支持多种类型的索引,如B树索引、位图索引、函数索引等。创建索引的基本语法是:`CREATE INDEX index_name ON table_name (column_name);` 接下来,**表空间**是Oracle数据库的逻辑存储单位,它将物理文件与...
9.2.1 创建表时,可以定义多种数据类型,如字符类型(CHAR、VARCHAR2、NCHAR、NVARCHAR2、LONG)、数字类型(NUMBER、BINARY_FLOAT、BINARY_DOUBLE)、日期类型(DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE)以及...
- **数字型**: NUMBER, INTEGER, FLOAT等。 - **日期类型**: DATE, TIMESTAMP等。 - **图片**: BLOB (Binary Large Object)。 **3. 创建表的案例** - **命令**: `create table tname (col1 type1, col2 type2, ......
2. **数据类型**:Oracle支持多种数据类型,如NUMBER、VARCHAR2、DATE、BINARY_FLOAT等,理解这些类型及其用途是数据库设计的基础。 3. **函数**:Oracle提供了一系列内置函数,如数学函数(如SQRT、MOD)、字符串...
price FLOAT, storenum INT, pub VARCHAR(50), pubday VARCHAR(15) ); ``` - **读者表(Reader)**:记录读者信息,如读者编号、姓名、性别、类别、借阅次数限制、所在部门和联系电话等。 - SQL创建语句示例:...
- teamB | Varchar2(10) | 外键,乙方球队编号 - aid | Varchar2(10) | 外键,场地编号 - **触发器表(LogTable)** - 字段名称 | 数据类型 | 说明 - lid | Varchar2(10) | 主键 - ltime | Date | 操作时间 -...
- 索引使用树形结构(如B树)来加速数据检索。通过索引,可以快速定位到所需的数据行,从而提高查询效率。 #### 十八、存在测试 (EXISTS 和 NOT EXISTS) - `EXISTS` 和 `NOT EXISTS` 用于测试子查询是否返回至少一...
14. **逻辑运算**:在条件语句中,`if(a<b) if(b) ...`可以理解为逻辑AND操作,只有当a小于b且b小于c时,才会执行后续代码。 15. **关系运算符**:`、`>`、`==`等用于比较操作,如`if(max<b)`中的`表示小于。 16. ...
Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems开发,后被甲骨文公司(Oracle)收购。Java的设计理念是“一次编写,到处运行”,它通过Java虚拟机(JVM)实现跨平台兼容性。本节主要讨论Java与Python...