oracle数据库中函数的使用,Oracle某些函数及使用

当前位置:我的异常网» 数据库 » Oracle某些函数及使用

Oracle某些函数及使用

www.myexceptions.net  网友分享于:2013-11-10  浏览:4次

Oracle某些函数及应用

2、使用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

decode(待比较的对象,如果为这个,那麼结果为这个,否则结果是这个)

===============================================================

语法格式: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

文章评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值