在处理数据时发现一个问题,Oracle对于小于1的小数,小数点前面的0是不显示的。
SQL> create table t1_number (num number);
Table created
SQL> insert into t1_number values(0.3268);
1 row inserted
SQL> insert into t1_number values(0.57965686);
1 row inserted
SQL> insert into t1_number values(52345234.5686);
1 row inserted
SQL> insert into t1_number values(4.552686);
1 row inserted
SQL> commit;
Commit complete
SQL> column num format 99999999999.9999999999999
SQL> select * from t1_number;
NUM
--------------------------
.3268000000000
.5796568600000
52345234.5686000000000
4.5526860000000
使用PL/SQL DEV工具查看时是有前面的0的
通过column num format 000000000000.99999999999设置也可以显示前面的0
但是这些都只是显示的结果,而不是数据库保存结果
SQL> column num format 00000000000.9999999999999
SQL> select * from t1_number;
NUM
--------------------------
00000000000.3268000000000
00000000000.5796568600000
00052345234.5686000000000
00000000004.5526860000000
00000000005.2920000000000
SQL> select substr(num,1,1) from t1_number;
SU
--
.
.
5
4
5
可以看到,无论前面出现多少位,通过substr函数获取的第一位任然是'.'
无论怎么转换,只要最终输出结果是数值型的,小数点前的0必然被丢弃,所以只有将数值转换为字符型,大致有两种方法:
1、直接使用to_char函数
首先实验一下将小数点前和小数点后都加上99999999的格式:
SQL> select to_char(num,'999999999.999999999') from t1_number;
TO_CHAR(NUM,'9999999
--------------------
.326800000
.579656860
52345234.568600000
4.552686000
5.292000000
发现小数点前还是没有0,而小数点后的0多出来了
再实验一下小数点前和小数点后都加上0000000000格式:
SQL> select to_char(num,'00000000000.000000000') from t1_number;
TO_CHAR(NUM,'000000000
----------------------
00000000000.326800000
00000000000.579656860
00052345234.568600000
00000000004.552686000
00000000005.292000000
发现小数点前是有0了,但是两边的0都多出来了,使用FM来去掉多于的0:
SQL> select to_char(num,'fm00000000000.000000000') from t1_number;
TO_CHAR(NUM,'FM0000000
----------------------
00000000000.326800000
00000000000.579656860
00052345234.568600000
00000000004.552686000
00000000005.292000000
没有效果,说明FM只能去掉用9表示的格式中产生的0:
SQL> select to_char(num,'fm999999999.999999999') from t1_number;
TO_CHAR(NUM,'FM99999
--------------------
.3268
.57965686
52345234.5686
4.552686
5.292
但是这样还是没有0,最后发现可以将小数点前的第一位置为0即可(注意9的个数要大于数值的位数):
SQL> select to_char(num,'fm999999990.999999999') from t1_number;
TO_CHAR(NUM,'FM99999
--------------------
0.3268
0.57965686
52345234.5686
4.552686
5.292
检查一下第一位,没有问题:
SQL> select substr(to_char(num,'fm999999990.999999999'),1,1) from t1_number;
SU
--
0
0
5
4
5
2、使用decode函数
既然小于1的小数首位必然是'.',那就判断首位是否为'.',是则在前面加上'0'即可
SQL> select decode(substr(num,1,1),'.','0'||num,num) from t1_number
DECODE(SUBSTR(NUM,1,1),'.','0'||NUM,NUM)
-----------------------------------------
0.3268
0.57965686
52345234.5686
4.552686
5.292
同样检查一下第一位,没有问题
SQL> select substr(decode(substr(num,1,1),'.','0'||num,num),1,1) fro
m t1_number;
SU
--
0
0
5
4
5
也可以写个函数来判断一下,不过可以用decode直接出来,感觉也没什么必要,暂时就这些吧。
-The End-
分享到:
相关推荐
Oracle 基本数据类型 Oracle 中有多种基本数据类型,包括字符类型、数字类型、日期类型、二进制类型等。了解这些数据类型的特点和使用场景,对于数据库设计和开发至关重要。本文将详细介绍 Oracle 中的基本数据类型...
例如,`number(3,0)`,输入575.316,实际保存的是575。 4. **Date**: 用于存储日期和时间,范围从公元前4712年到公元4712年,包括小时、分钟和秒。默认格式为DD-MON-YY。例如,'07-NOV-00'表示2000年11月7日。 5. ...
Oracle中的DATE类型存储了世纪、年、月、日、小时、分钟和秒,具体可以达到小数点后三位的秒数精度。由于日期时间型数据需要记录时间信息,其存储格式通常为7个字节。 LOB数据类型包括CLOB、NCLOB和BLOB等,用于...
Oracle 数据库语句大全 Oracle 数据库语句大全是 Oracle 数据库管理系统中的一系列语句,用于管理和操作数据库。这些语句可以分为五大类:数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)和事务...
在现实世界中,为了有效地保存和处理不同类型的信息,我们需要使用不同的数据类型。例如,整型数据用于表示整数值,支持常见的数学运算如加、减、乘、除;浮点型数据则用于表示带有小数点的数值;而字符或字符串类型...
在Oracle中,数据类型是定义数据库中字段或变量所能存储的数据种类的关键元素,而存储方式则关乎如何在磁盘上保存这些数据以及如何优化空间利用率。以下是对Oracle数据类型及存储方式的深入探讨。 ### 第一部分:...
8. BFILE: 外部二进制对象类型,保存在数据库外部,最大长度同样为 4GB。Oracle 可以读取和查询 BFILE,但无法进行写入操作,其大小由操作系统决定。 【Java 中操作 Oracle Clob 型】 在 Java 中,我们可以使用 `...
ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。 拉里•埃里森 就业前景 从就业与择业的...
- `NVL(column_name, 0)`: 如果为空,则替换为 0。 - `NULLIF(column_name1, column_name2)`: 如果相等,则返回 NULL。 - `DECODE(column_name, value, result, default)`: 类似于 IF-THEN-ELSE。 **2.3 SQL 中...
- **定义**: 可变长的数值列,允许 0、正值及负值,m 是所有有效数字的位数,n 是小数点后的位数。 - **特点**: - m 范围为 1 至 38,n 范围为 -84 至 127; - 如果数值超出位数限制,则会被截断; - 例如,`...
15. LockLevel:锁定粒度,0为行级锁,1为DataStore级锁。 16. LockWait:定义锁等待超时上限,单位为秒,允许小数点后一位。 17. LogAutoTruncate:在恢复期间遇到异常日志时的行为,0表示停止并报告错误,1表示...
如果`m`为负,则表示小数点前有`|m|`位。 - `CHAR(n)`:这是定长字符串类型,长度固定为`n`个字符,不足时用空格填充。 - `VARCHAR(n)`:变长字符串类型,根据实际内容长度占用空间,对空格敏感。 - `VARCHAR2(n)...
`创建了一个名为`my_tablespace`的表空间,数据文件初始大小为100K,并启用自动扩展。 Oracle用户管理和权限控制是确保数据安全的重要环节。`CREATE USER`用于创建新用户,`ALTER USER`可以修改密码或锁定/解锁账户...
Oracle数据库是世界上最广泛使用的数据库管理系统之一,其SQL语言是数据管理的核心工具。SQL(Structured Query Language)是一种标准化的关系型数据库语言,用于查询、插入、更新和管理关系数据库。本篇文章将深入...
2. **VARCHAR2(n)**:这是Oracle中最常用的可变长度字符串数据类型,长度范围为1到4000字节。与CHAR不同,VARCHAR2只存储实际的数据长度,不会填充空格。在Oracle 8i及以上版本,如果数据前后有空格,系统会自动删除...
Oracle数据库是世界上最流行的关系型数据库管理系统之一,其强大的功能和高效的数据管理能力使其在企业级应用中广泛应用。本文将深入探讨Oracle数据类型及其存储方式,帮助读者理解和掌握Oracle数据库的基础知识。 ...
### Oracle自学入门知识点详解 #### 一、Oracle安装与配置基础 在开始Oracle的学习之前,首先需要确保已经正确安装并配置了Oracle环境。本部分基于以下系统环境: - **操作系统**:Windows 2000 - **数据库版本**:...
SQL,全称为Structured Query Language,是一种专门用于管理和处理关系数据库的标准语言。Oracle SQL是SQL的一个特定实现,由Oracle公司提供,用于在其数据库管理系统中执行数据操作。本章将重点介绍SQL的基本概念、...
在Oracle 12c及更高版本中,通常推荐使用Varchar2而非Varchar,因为Varchar现在被视为Varchar2的别名。对于大数据,BLOB和CLOB提供了灵活且高效的方法。理解这些数据类型及其特性对于有效的数据库设计至关重要。