Oracle 入面既一d函数

LPAD(column|expression, n,'string')
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的情况

SQL> select lpad('Jasonbbbbbbbbbbbb',12,'ksssssssssssss') from dual;

LPAD('JASONB
------------
Jasonbbbbbbb

SQL> select rpad('Jasonbbbbbbbbbbbb',12,'ksssssssssssss') from dual;

RPAD('JASONB
------------
Jasonbbbbbbb

注意输出返回值已被砍至12个字符。  无论lpad定系 rpad。
======================================================================================
INSTR(column|expression,‘string’, [,m], [n] )

教材说明:
从字符返值中回指定的字符,开始位置在 m,n字符长度 (如果 m 是负数,计数从字符值末尾开始;如果 n 被忽略,返回到串结束的所有字
符)。

高亮部分吴容易理解, 其实如果 m正数, 即系从字符第m个字符开始计, 若m系负数, 就系从字符的倒数第m个字符开始计(都是从左向右)。 若m=0 ,则m=1

例子:

SQL> select substr('Jason', 1 ,1) from dual;

S
-
J

从第1个字符截1个字符, 当然系J拉


SQL> select substr('Jason', -1 ,1) from dual;

S
-
n

从倒数第1个字符截1个字符, 就系n了

SQL> select substr('Jason', -2 ,1) from dual;

S
-
o

从倒数第2个字符截1个字符, 就系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个小数位

SQL> select round(555.245,2) from dual;

ROUND(555.245,2)
----------------
          555.25

默认n=0,即系保留0个小数位

SQL> select round(555.245) from dual;

ROUND(555.245)
--------------
           555

n=1, 从小数点左边第2位(十位)四舍五入。

SQL> select round(555.245,-1) from dual;

ROUND(555.245,-1)
-----------------
              560

n=2,从小数点左边第3位(百位)四舍五入。

SQL> select round(555.245,-2) from dual;

ROUND(555.245,-2)
-----------------
              600

n=3,从小数点左边第3位(百位)四舍五入。 相当于 0555, 对千位数四舍五入 就系1000

SQL> select round(555.245,-3) from dual;

ROUND(555.245,-3)
-----------------
             1000

注意:   上面例子当百位小于5时, 相当于0455 千位数四舍五入, 因为百位小于5, 千位就系0了  变成0000了。

SQL> select round(455.245,-3) from dual;

ROUND(455.245,-3)
-----------------
                0

而且oracle 四舍5入 只考虑当前位数的右边一位的大小, 而不是从最右边那位开始计起的。
例如对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
posted @ 2013-04-02 00:53  Gateman  阅读(167)  评论(0编辑  收藏  举报