Oracle 入面既一d函数
RPAD(column|expression, n,'string')
教材里的说明:填充字符值左、右调节到 n 字符位置的总宽度
详细d可以甘样理解:
判断 ‘column|expression’ 的长度length,
如果小于n, 就用‘string' 从左边或右边填充到直到 length =n 为止。
如果等于n, 就不变,返回原本的参数
如果大于n,就斩掉右边字符,直到 ‘column|expression’的length=n. 其实就系从'column|expression', 截取前n个字符拉。
例子:
小于n的情况, 'Jason' 长度为5哦
SQL> select lpad('Jason',12,'kkkkkkkkkkkkkkkkkkkkkkkkkk') from dual;
LPAD('JASON'
------------
kkkkkkkJason
SQL> select lpad('Jason',12,'ks') from dual;
LPAD('JASON'
------------
kskskskJason
大于n的情况
注意输出返回值已被砍至12个字符。 无论lpad定系 rpad。SQL> select lpad('Jasonbbbbbbbbbbbb',12,'ksssssssssssss') from dual;
LPAD('JASONB
------------
Jasonbbbbbbb
SQL> select rpad('Jasonbbbbbbbbbbbb',12,'ksssssssssssss') from dual;
RPAD('JASONB
------------
Jasonbbbbbbb
======================================================================================
INSTR(column|expression,‘string’, [,m], [n] )
教材说明:
从字符返值中回指定的字符,开始位置在 m,n字符长度 (如果 m 是负数,计数从字符值末尾开始;如果 n 被忽略,返回到串结束的所有字
符)。
高亮部分吴容易理解, 其实如果 m正数, 即系从字符第m个字符开始计, 若m系负数, 就系从字符的倒数第m个字符开始计(都是从左向右)。 若m=0 ,则m=1
例子:
从第1个字符截1个字符, 当然系J拉SQL> select substr('Jason', 1 ,1) from dual;
S
-
J
从倒数第1个字符截1个字符, 就系n了
SQL> select substr('Jason', -1 ,1) from dual;
S
-
n
从倒数第2个字符截1个字符, 就系o了SQL> select substr('Jason', -2 ,1) from dual;
S
-
o
SQL> select substr('Jason', -2 ,3) from dual;
SU
--
on
从倒数第2个字符截3个字符, 就系on了(虽然命系截取3个,但只有2
===============================================================================
ROUND(column|expression, n)
说明:
四舍五入列、表达式或值为 n 位小数位,或者,如果 n 被忽略,无小数位。(如果 n是负值,小数点左边左边的数被四舍五入)
呢个容易理解,n=2,保留2个小数位
默认n=0,即系保留0个小数位SQL> select round(555.245,2) from dual;
ROUND(555.245,2)
----------------
555.25
n=1, 从小数点左边第2位(十位)四舍五入。SQL> select round(555.245) from dual;
ROUND(555.245)
--------------
555
n=2,从小数点左边第3位(百位)四舍五入。SQL> select round(555.245,-1) from dual;
ROUND(555.245,-1)
-----------------
560
n=3,从小数点左边第3位(百位)四舍五入。 相当于 0555, 对千位数四舍五入 就系1000SQL> select round(555.245,-2) from dual;
ROUND(555.245,-2)
-----------------
600
注意: 上面例子当百位小于5时, 相当于0455 千位数四舍五入, 因为百位小于5, 千位就系0了 变成0000了。SQL> select round(555.245,-3) from dual;
ROUND(555.245,-3)
-----------------
1000
而且oracle 四舍5入 只考虑当前位数的右边一位的大小, 而不是从最右边那位开始计起的。SQL> select round(455.245,-3) from dual;
ROUND(455.245,-3)
-----------------
0
例如对2.4449999999 保留5为四舍五入, 读书时可能 2.44499999 ~ 2,445 ~ 2.45
但oracle 之考虑 2.444 ~ 2.44
SQL> select round(456.2449999999,2) from dual;
ROUND(456.2449999999,2)
-----------------------
456.24
NVL(p1,p2)
呢个好简单, 如果p1是NULL则返回p2,否则p1. 相当于sybase 的isnull拉。
NVL2(p1,p2,p3)
如果p1是NULL则返回p2,否则p3..
NULLIF(p1,p2)
如果p1等于p2 返回NULL, 否则返回p1, p1不能为NULL。
COALESCE(p1,p2,p3...pn)
返回第1个非空表达式,如果p1非空返回p1, 若p1是NULL而p2非NULL则返回p2....后面你懂的。。
Decode(p, p1, r1,
p2, r2,
p3, r3,
r0)
条件判断函数相当于 case p when p1 then r1
when p2 then r2
when p2 then r3
else r0
end