1、select trunc(1.23456789,2) from dual
round(m,n)可以四舍五入
trunc(m,n)直接丢弃,不四舍五入
select to_char(345,'990.99') from dual
小数前面缺0补充0,后面缺0补0,后面保留两位小数!
2、使用decode函数
decode(待比较的对象,如果为这个,那麼结果为这个,否则结果是这个)
select trim(' 123456 ') from dual;
既然小于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
===============================================================
语法格式:substr(cExpression,nStartPosition [,nCharactersReturned]) 其中,cExpression指定要从其中返回字符串的字符表达式或备注字段;nStartPosition用于指定返回的字符串在字符表达式或备注字段中的位置,nCharactersReturned用于指定返回的字符数目,缺省时返回字符表达式的值结束前的全部字符。
3.举例:
substr('abcdefghijlkm',1,5) 显示 "abcde"
substr('abcdefghijlkm',6) 显示 "fghijklm"
substr('abcdefghijlkm',-2)显示“km”
substr('abcdefghijlkm',-4)显示“jlkm”
================================================================
小数点前的0的显示问题
在处理数据时发现一个问题,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
分享到:
相关推荐
- ****: 可选的排序子句,某些函数需要排序以正确工作。 - ****: 可选的窗口定义,用于定义函数的作用范围。 #### 三、Oracle分析函数分类 Oracle提供的分析函数大致分为五类: 1. **等级(Ranking)函数**:用于...
### ORACLE CRC32函数详解 ...通过以上介绍,我们可以了解到Oracle数据库中`CRC32`函数的强大之处及其在实际应用中的广泛用途。它不仅能够帮助我们有效地进行数据校验和去重,还能在一定程度上提高系统的整体性能。
总之,这个CHM文件是Oracle数据库开发者和管理员不可或缺的参考工具,它将帮助我们更好地理解和应用Oracle函数,从而优化我们的数据库操作,提高工作效率。对于初学者和经验丰富的专业人士来说,都是一个宝贵的资料...
### Oracle管道函数详解 #### 一、概述 ...通过以上介绍,我们可以看出Oracle管道函数为Oracle数据库提供了一种灵活高效的方式来处理大量数据并实时返回处理结果,对于某些特定的应用场景非常有用。
在 Oracle 数据库中,自定义函数是一种非常重要的特性,允许用户根据需求创建自己的功能模块,以扩展数据库的内置功能。本文将详细讲解如何创建、调用和管理自定义函数,以及讨论它们在实际应用中的优缺点。 一、...
- ORDER BY子句:用于确定在每个分区内数据的排序方式,这会影响某些分析函数的结果。 - 窗口子句:用于定义窗口函数的范围,可以是基于范围(range)或基于行(rows)。 2. 窗口函数: 窗口函数是在窗口(一个...
- **CUBE** 函数则更进一步,除了ROLLUP的所有组合外,还会生成所有可能的列组合的汇总,即使某些组合没有实际意义。 2. **排名函数:RANK(), DENSE_RANK(), ROW_NUMBER()** - **RANK()** 用于为每一行分配一个...
在IT领域,尤其是在数据库管理与查询...以上只是Oracle数据库中众多内置函数的一部分,熟练掌握这些函数的应用,能够极大地提高数据处理和查询的效率及准确性。对于初学者而言,通过实践来加深理解和记忆是十分必要的。
Oracle分析函数简介部分提到,分析函数在OLTP(在线事务处理)和OLAP系统中的应用场景不同。OLTP系统处理实时事务,业务逻辑复杂,而OLAP系统则面向分析决策,处理大量数据且对实时性要求不高。分析函数能提供比传统...
- **VAR_POP、VAR_SAMP、STDEV_POPE及线性的衰减函数**:计算任何未排序分区的统计值。 3. **PARTITION子句** 分区子句用于按照特定条件将结果集划分为多个逻辑分区。如果没有指定分区子句,则整个结果集被视为...
下面将详细探讨Oracle分析函数的基本概念、常用函数以及实际应用示例。 一、Oracle分析函数基础 1. 分析函数与聚合函数的区别: - 聚合函数(如SUM, COUNT, AVG)作用于整个结果集或指定的分组,返回单个值。 - ...
NULL表示未知或缺失的数据,当与算术运算符或某些函数结合时,如果操作数为NULL,结果通常也是NULL。然而,有些函数如`CONCAT`、`DECODE`、`DUMP`、`NVL`和`REPLACE`在遇到NULL值时会返回非NULL值。`NVL`函数尤其...
Oracle提供了一些内置的函数来帮助我们完成这个任务。本篇文章将深入探讨Oracle中用于拆分字符串的函数,并通过具体的示例展示它们的用法。 1. **instr() 函数** `instr()` 是Oracle中的一个内建函数,它用于查找...
### Oracle 第四章 单行函数 #### 一、引言 在Oracle数据库的学习过程中,了解并掌握单行函数是非常重要的一步。单行函数是指针对每一行的数据进行处理,并返回一个处理结果的函数。这类函数在查询语句中非常常见,...
- Orafce并不能完全复现Oracle的所有特性,某些高级功能可能无法实现,因此在迁移到PostgreSQL时,需要对应用代码进行审查和调整。 - 性能方面,由于Orafce是模拟Oracle行为,可能会比原生的PostgreSQL函数稍慢,...
在Oracle数据库中,函数是一类预定义的子程序,它可以对输入参数执行运算,并返回一个结果值。Oracle提供了一系列的函数,用于处理不同类型的数据,如字符串、数字、日期和时间等。下面按照文档所提供的内容,详细...
此外,某些分析函数支持DISTINCT参数,这限制了OVER子句中的其他选项,比如ORDER BY。 在使用分析函数时,理解窗口的概念至关重要。例如,以下示例展示了如何按薪资进行排序并计算每个员工与其前后两个同事的平均...
通过以上内容的比较可以看出,虽然DB2和Oracle在某些细节上存在差异,但大部分函数的功能和用法都非常接近。这为开发者从Oracle向DB2迁移提供了便利条件,同时也需要注意到两者之间的区别,以便在实际应用中做出正确...
- 窗口函数(如RANK, DENSE_RANK, ROW_NUMBER)在选定的窗口内进行计算,窗口可以是整个结果集,也可以是根据某些条件定义的子集。 - 报表函数(如CUME_DIST, PERCENT_RANK)通常用于计算相对位置或百分比分布,...
16. **TRANSLATE** 函数:将字符串中的某些字符替换为其他字符,如 `TRANSLATE('ABCDefghijklmn', 'eg', '替代')` 替换'e'和'g'。 了解并熟练使用这些函数,能帮助你在Oracle数据库中更高效地进行字符串处理,无论...