隨筆-61  評論-13  文章-19  trackbacks-0

          轉載:oracle中的函數

          Oracle已經內建了許多函數,不同的函數有不同的作用和用法,有的函數只能作用在一個記錄行上,有的能夠作用在多個記錄行上,不同的函數可能處理不同的數據類型。常見的有兩類,單行函數和分組函數 。

          單行函數:

          單行函數

          分類 函數 功能 示例
          字符函數 LPAD(<c1>,<i>[,<c2>]) 在字符串 c1 的左邊添加字符串 c2 直到 c1 字符串的長度等于 i

          SELECT? LPAD(‘Hello!’,8,’ ’) leftpad,RPAD(‘Hello!’,8,’ ’) rightpad

          FROM DUAL;

           

          RPAD(<c1>,<i>[,<c2>]) 在字符串 c1 的右邊添加字符串 c2 直到 c1 字符串的長度等于 i
          LOWER(<c1>) 把字符串 c1 轉換為小寫 SELECT LOWER(ename)? one,UPPER(ename) two, INITCAP(ename) FROM EMP;
          UPPER(<c1>) 把字符串 c1 轉換為大寫
          INITCAP(<c1>) c1 字符串的每一個單詞的第一個字母轉換成大寫字母
          LENGTH(<c1>) 返回字符串 c1 的長度 SELECT LENGTH(‘How are you’) FROM DUAL;
          SUBSTR(<c1>,<i>[,<j>]) 返回字符串 c1 中從第 i 個位置開始的 j 個字符(向右)。如果省略 j ,則返回 c1 中從第 i 個位置開始的所有字符。如果 j 為負,則返回字符串 c1 中從第 i 個位置開始的 j 個字符(向左)。 SELECT SUBSTR(‘Hello,World’,1,5) FROM DUAL;
          INSTR(<c1>,<c2>[,<i>[,<j>]]) c1 中從位置 i 開始查找 c2 c1 中出第 j 次的位置, i 可以為負 ( 此時,從 c1 的尾部開始 )

          SELECT INSTR(‘Mississippi’,’i’,3,3) FROM DUAL; 返回結果 11

          SELECT INSTR(‘Mississippi’,’i’,-2,3) FROM DUAL; 返回結果 2

           

          LTRIM(<c1>,<c2>) c1 前面開始去掉出現在 c2 的中任何前導字符集。 SELECT LTRIM(‘Mississippi’,’Mis’) FROM DUAL; 返回結果’ppi’。

          SELECT RTRIM(‘Mississippi’,’ip’) FROM DUAL; 返回結果’Mississ’。
           
          RTRIM(<c1>,<c2>) c1 后面開始去掉出現在 c2 的中任何前導字符集。
          數學函數 ABS(<n>) 返回 n 的絕對值 SELECT ABC(-2),ABS(2) FROM DUAL;
          ROUND(<n1>,<n2>) n1 的小數點后保留 n2 位(四舍五入)并返回。如果 n2 小于零, n1 舍入到小數點左邊。

          SELECT ROUND(12345.678,-2),

          ROUND(12345.678,2)

          ?FROM? DUAL;

          分別返回結果: 12300 12345.68

           

          CEIL(<n>) n 向上取整,并返回。

          SELECT CEIL(5.1),CEIL(-21.4) FROM? DUAL;

          分別返回: 6, -21

           

          FLOOR(<n>) n 向下取整,并返回。

          SELECT FLOOR(5.1),FLOOR(-21.4) FROM? DUAL;

          分別返回: 5, -22

           

          MOD(<n1>,<n2>) 返回 n1 n2 后的余數。

          SELECT MOD(14,5),MOD(8,25),MOD(-64,7) FROM DUAL;

          分別返回結果: 4 0.5 -1

           

          SIGN(<n>)

          符號函數, n>0 ,返回 1

          n<0 ,返回 -1

          n=0 ,返回 0

           

          SELECT SIGN(-2.3),SIGN(2.3),SIGN(0) FROM DUAL;
          SQRT(<n>) 返回 n 的平方根 SELECT SQRT(9) FROM DUAL;
          TRUNC(<n1>,<n2>) 功能類似 ROUND 函數。但不做四舍五入。

          SELECT TRUNC(123.456,2),TRUNC(123.456,-1) FROM DUAL;

          分別返回結果: 123.45 120

           

          VSIZE(n) 返回數字 n 的存儲字節 SELECT VSIZE(123) FROM DUAL;
          日期函數 ( 日期可以進行算術運算 ) SYSDATE 返回相同日期 SELECT SYSDATE FROM DUAL;
          ADD_MONTHS(<d>,<i>) 返回日期 d 加上 i 個月后的新日期 (i 正可負 )

          SELECT SYSDATE, ADD_MONTHS(SYSDATE,2),

          ADD_MONTHS(SYSDATE,-2)

          FROM DUAL;

           

          LAST_DAY(<d>) 返回日期 d 所在的月的最后一天。 SELECT SYSDATE,LAST_DAY(SYSDATE) FROM DUAL
          MONTHS_BETWEEN(<d1>,<d2>) 返回日期 d1 d2 大多少月數。 SELECT MONTHS_BETWEEN(’19-Dec-1999’,’19-Mar-2000’ FROM DUAL;
          NEW_TIME(<d>,<tz1>,<tz2>) 將時區 tz1 的時間 d ,轉換為時區 tz2 里的時間。 SELECT SYSDATE,NEW_TIME(SYSDATE,’CDT’,’PDT’) FROM DUAL;
          NEXT_DAY(<d>,<dow>) 返回日期 d 后的第一個 dow (dow day of week) SELECT NEXT_DAY(SYSDATE,’Monday’) FROM DUAL;
          常用轉換函數 TO_CHAR(<x>[,<fmt>[,<nlsparm>]]) x 轉換成字符串。(參數含義請看 ORACLE 的聯機幫助) SELECT TO_CHAR(SYSDATE,’YYYY-MM-DD’) FROM DUAL;
          TO_NUMBER(<c>[,<fmt>[,<nlsparm>]]) 將字符串 c 轉換成數字。(參數含義請看 ORACLE 的聯機幫助) SELECT TO_NUMBER(‘123’) FROM DUAL;

          TO_DATE(<c>[,<fmt>[,<nlsparm>]])

          ( 常見的日期格式請查聯機幫助。 )

          將字符串 c 轉換成日期。 SELECT TO_DATE(’19-Mar-99’,’DD-Mon-YYYY’) FROM DUAL;
          兩個重要函數

          DECODE(<x>,<m1>,<r1>[,<m2>,

          <r2…>][,<d>])

          (DECODE 函數功能非常強大,請仔細玩味。 )

           

          一個功能非常強大的函數,它使得 SQL 非常高效。它的功能類似于一系列的 if…then…else 語句。

          SELECT sid,serial#,username,

          DECODE(command

          ,0,’None’

          ,2,’Insert’

          ,3,’Select’

          ,6,’Update’

          ,7,’Delete’

          ,8,’Drop

          ,’Other’) cmd

          FROM V$SESSION WHERE type<>’BACKGROUND’;

           

          NVL(x1,x2)

          注意 ORACLE 中的 NULL 值,注意該函數作用

           

          如果 x1 為空返回 x2 ,否則返回 x1 SELECT NVL(ename,’ 無姓名 ’)? FROM? EMP;

          分組函數

            AVG([{DISTINCT|ALL}]<n>) 求返回行的指定列的平均值

          SELECT AVG(sal),AVG(ALL sal),AVG(DISTINCT sal)

          FROM SCOTT.EMP;

           

          COUNT({*|[DISTINCT|ALL]}<x>) 統計返回的行數

          SELECT COUNT (*), COUNT(DISTINCT mgr),COUNT(mgr)

          FROM SCOTT.EMP

           

          MAX([{DISTINCT|ALL}]<x>) 求返回行的指定列的最大值 SELECT MAX(sal),MAX(DISTINCT sal) FROM EMP;
          MIN([{DISTINCT|ALL}]<x>) 求返回行的指定列的最小值 SELECT MIN(sal),MIN(DISTINCT sal) FROM EMP;
          STDDEV([{DISTINCT|ALL}]<x>) 求返回行的指定列的標準方差 SELECT STDDEV(sal),STDDEV(DISTINCT sal) FROM EMP;
          SUM() 求返回行的指定列的和 SELECT SUM(sal) FROM EMP;
          VARIANCE() 求返回行的指定列的差異值  

          注意:

          A、 分組函數不會處理空值,也不會返回空值

          B、? 所有的分組函數既可以作用于指定列的所有值上,也可以只作用于指定列的差異列值上

          ?? C、當指定ALL選項時,分組函數作用于所有非空列值行上。當指定DISTINCT選項時,分組函數只作用于非空的且具有不同列值的行上(即,重復列值的行只計算一行)。
          posted on 2006-03-23 22:38 xnabx 閱讀(246) 評論(0)  編輯  收藏 所屬分類: 3、DataBase

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 通化县| 昆明市| 静海县| 伊通| 阿拉尔市| 屏山县| 原平市| 钦州市| 邢台县| 永吉县| 玉溪市| 错那县| 辛集市| 红桥区| 宜兴市| 彰化县| 法库县| 岳阳县| 柳州市| 和平县| 新龙县| 耒阳市| 长葛市| 黄骅市| 安国市| 新田县| 安陆市| 广德县| 承德市| 湄潭县| 东丰县| 昆明市| 景德镇市| 安塞县| 长泰县| 平塘县| 双柏县| 乐亭县| 吴桥县| 柳林县| 磴口县|