單行函數:
單行函數 | |||
分類 | 函數 | 功能 | 示例 |
字符函數 | 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選項時,分組函數只作用于非空的且具有不同列值的行上(即,重復列值的行只計算一行);
轉自:http://www.pcptel.com/content/view/66/30/