Oracle中常用的函数

1.NVL(expr1,expr2)

 解释:如果参数一expr1为空(包括null和‘’),则结果为expr2的值,如果expr1不为空,则结果为expr1的值。

SQL> SELECT NVL(NULL,'1') FROM DUAL;

NVL(NULL,'1')
-------------
1

SQL> SELECT NVL('','1') FROM DUAL;

NVL('','1')
-----------
1

SQL> SELECT NVL('a','1') FROM DUAL;

NVL('A','1')
------------
a

SQL> 

2.NVL2(expr1,expr2,expr3)

解释:如果参数expr1值为空,则结果为expr3的值,如果expr1不为空,则结果为expr2的值。

SQL> SELECT NVL2(null,'1','2') FROM DUAL;

NVL2(NULL,'1','2')
------------------
2

SQL> SELECT NVL2('','1','2') FROM DUAL;

NVL2('','1','2')
----------------
2

SQL> SELECT NVL2('a','1','2') FROM DUAL;

NVL2('A','1','2')
-----------------
1

SQL> 

3.LPAD(string,padded_length,[ pad_string])

解释:参数1:目标字符串,参数2:最终生成字符串的长度,参数3:填充字符(可以没有)。

此方法表示从左开始截取字符串,截取的长度为padded_length的值。如果有第三个参数,则表示在字符串(第一个参数)左边填充字符(pad_string的值)。如果字符串的长度小于参数padded_length的值,则在字符串前面补充空格。注意最后一个SQL例子。

SQL> SELECT LPAD('123',10) FROM DUAL;

LPAD('123',10)
--------------
       123

SQL> SELECT LPAD('1234567890',10) FROM DUAL;

LPAD('1234567890',10)
---------------------
1234567890

SQL> SELECT LPAD('1234567890',5) FROM DUAL;

LPAD('1234567890',5)
--------------------
12345

SQL> SELECT LPAD('123',10,'0') FROM DUAL;

LPAD('123',10,'0')
------------------
0000000123

SQL> SELECT LPAD('123',10,'x') FROM DUAL;

LPAD('123',10,'X')
------------------
xxxxxxx123

SQL> SELECT LPAD('123',10,'ABC') FROM DUAL;

LPAD('123',10,'ABC')
--------------------
ABCABCA123

SQL> 

4.RPAD(string,padded_length,[ pad_string])

解释:此方法和上面的LPAD()一样,不过这个是从右边开始的。

SQL> SELECT RPAD('ABC',5) FROM DUAL;

RPAD('ABC',5)
-------------
ABC

SQL> SELECT RPAD('ABCDEFG',5) FROM DUAL;

RPAD('ABCDEFG',5)
-----------------
ABCDE

SQL> SELECT RPAD('ABC',5,'0') FROM DUAL;

RPAD('ABC',5,'0')
-----------------
ABC00

SQL> SELECT RPAD('ABC',10,'123') FROM DUAL;

RPAD('ABC',10,'123')
--------------------
ABC1231231

SQL> 

5.SIGN(expr1-expr2)

解释:此函数用来比较两个值的大小,如果expr1>expr2,返回1,如果expr1<expr2,返回-1,如果相等返回0。

SQL> select sign(5-3) from dual;

 SIGN(5-3)
----------
         1

SQL> select sign(5-10) from dual;

SIGN(5-10)
----------
        -1

SQL> select sign(5-5) from dual;

 SIGN(5-5)
----------
         0

SQL> 

6.DECODE(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)

解释:如果条件满足值1,则结果为返回值1,如果条件满足值2,则结果为返回值2,以此类推,如果都不满足,则结果为缺省值。

具体含义如下,

SQL> select decode('符合条件','符合条件','正确','不符合条件','错误','未知') from dual;

DECODE('符合条件','符合条件','正确','不符合条件','错误','未知')
--------------------------------------------
正确

SQL> select decode('不符合条件','符合条件','正确','不符合条件','错误','未知') from dual;

DECODE('不符合条件','符合条件','正确','不符合条件','错误','未知')
---------------------------------------------
错误

SQL> select decode('条件','符合条件','正确','不符合条件','错误','未知') from dual;

DECODE('条件','符合条件','正确','不符合条件','错误','未知')
------------------------------------------
未知

SQL> 

比如我有一张表T_HAO_COALA_ACCOUNT(客户账户表):

IDCUSTOMER_NAMESEXBIRTHDAYPRINCIPALBALANCEARREARAGEBILL_DATE
1张三12010/12/15000.001000.004000.0010
3王五11987/6/1130000.001500.0028500.005
2李四12007/7/1810000.008000.002000.0012
422019/12/12000.000.002000.0020
5哈哈22019/12/120000.0020000.000.0015
6拉拉11985/2/138000.006000.002000.008


1.将性别转换成汉字:PRINCIPAL:本金,BALANCE:余额,ARREARAGE:欠款,BILL_DATE:账单日。

select t.id,t.customer_name,decode(t.sex,'1','男','2','女') from t_hao_coala_account t

2.比较大小。找出欠款大于余额的:

select t.id,t.customer_name,decode(sign(t.arrearage-t.balance),0,'持平','1','欠款大于余额','-1','欠款较少') as result 
from t_hao_coala_account t 

3.本金等于10000放在最前面,其次是本金大于10000的,同时按本金升序排列

select t.id,t.customer_name,t.principal from t_hao_coala_account t  
order by decode(sign(t.principal-10000),0,1,1,2,-1,3),t.principal asc

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值