oracle的函數有:1、字串函數,包括ASCII()、CONCAT()等;2、數位函數,包括ABS()、COS()等;3、日期函數,包括EXTRACT()、ROUND()等;4、轉換函數,包括TO_CHAR()、TO_DATE()等。
本教學操作環境:Windows7系統、Oracle 11g版、Dell G3電腦。
Oracle SQL語句中經常使用到Oracle自帶的函數,這些函數豐富了SQL的語言功能,為Oracle SQL提供了更多的操作性。Oracle函數可以接受零個或者多個輸入引數,並返回一個輸出結果。 Oracle 資料庫中主要使用兩種型別的函數:
1、單行函數:對每一個函數應用在表的記錄中時,只能輸入一行中的列值作為輸入引數(或常數),並且返回一個結果。
例如1:MOD(X,Y) 是求餘函數,返回的X除以Y的餘數,其中X和Y可以是列值,也可以是常數。
例如2:TO_CHAR(X,'YYYYMMDD')是時間型別轉字串的函數,其中X可以是行中某一時間型別(date)的列,也可以是一個時間型別的常數。
常用的單行函數大致以下幾類:
字串函數:對字串進行操作,例如:TO_CHAR()、SUBSTR()、DECODE()等等。
數值函數:對數值進行計算或操作,返回一個數位。例如:ABS()、MOD()、ROUND()等等。
轉換函數:將一種資料型別轉換成另外一種型別:例如:TO_CHAR()、TO_NUMBER()、TO_DATE()等等。
日期函數:對時間和日期進行操作的函數。例如:TRUNC()、SYSDATE()、ADD_MONTHS()等等。
2、聚合函數:聚合函數同時可以對多行資料進行操作,並返回一個結果。比如 SUM(x)返回結果集中 x 列的總合。
一、字串函數
字元函數接受字元引數,這些引數可以是表中的列,也可以是一個字串表示式。
常用的字元函數:
函數 | 說明 |
ASCII(X) | 返回字元X的ASCII碼 |
CONCAT(X,Y) | 連線字串X和Y |
INSTR(X,STR[,START][,N) | 從X中查詢str,可以指定從start開始,也可以指定從n開始 |
LENGTH(X) | 返回X的長度 |
LOWER(X) | X轉換成小寫 |
UPPER(X) | X轉換成大寫 |
LTRIM(X[,TRIM_STR]) | 把X的左邊截去trim_str字串,預設截去空格 |
RTRIM(X[,TRIM_STR]) | 把X的右邊截去trim_str字串,預設截去空格 |
TRIM([TRIM_STR FROM]X) | 把X的兩邊截去trim_str字串,預設截去空格 |
REPLACE(X,old,new) | 在X中查詢old,並替換成new |
SUBSTR(X,start[,length]) | 返回X的字串,從start處開始,擷取length個字元,預設length,預設到結尾 |
上面各函數的例子:
範例 | 範例結果 |
SELECT ASCII('a') FROM dual; | 97 |
SELECT CONCAT('Hello','world') FROM dual; | Helloworld |
SELECT INSTR('Hello world','or') FROM dual; | 8 |
SELECT LENGTH('Hello') FROM dual; | 5 |
SELECT LOWER('Hello') FROM dual; | hello |
SELECT UPPER('hello') FROM dual; | HELLO |
SELECT LTRIM('=Hello=','=') FROM dual; | Hello= |
SELECT RTRIM('=Hello=','=') FROM dual; | =Hello |
SELECT TRIM('='FROM'=Hello=') FROM dual; | Hello |
SELECT REPLACE('ABCDE','CD','AAA')FROM dual; | ABAAAE |
SELECT SUBSTR('ABCDE',2,3) FROM dual; | BCD |
二、數位函數
數位函數接受數位引數,引數可以來自表中的一列,也可以是一個數位表示式。
函數 | 說明 | 範例 |
ABS(X) | X的絕對值 | ABS(-3)=3 |
ACOS(X) | X的反餘弦 | ACOS(1)=0 |
COS(X) | 餘弦 | COS(1)=0.54030230586814 |
CEIL(X) | 大於或等於X的最小值 | CEIL(5.4)=6 |
FLOOR(X) | 小於或等於X的最大值 | FLOOR(5.8)=5 |
LOG(X,Y) | X為底Y的對數 | LOG(2,4)=2 |
MOD(X,Y) | X除以Y的餘數 | MOD(8,3)=2 |
POWER(X,Y) | X的Y次冪 | POWER(2,3)=8 |
ROUND(X[,Y]) | X在第Y位四捨五入 | ROUND(3.456,2)=3.46 |
SQRT(X) | X的平方根 | SQRT(4)=2 |
TRUNC(X[,Y]) | X在第Y位截斷 | TRUNC(3.456,2)=3.45 |
說明:
1. ROUND(X[,Y]),四捨五入。
在預設 y 時,預設 y=0;比如:ROUND(3.56)=4。
y 是正整數,就是四捨五入到小數點後 y 位。ROUND(5.654,2)=5.65。
y 是負整數,四捨五入到小數點左邊|y|位。ROUND(351.654,-2)=400。
2. TRUNC(x[,y]),直接擷取,不四捨五入。
在預設 y 時,預設 y=0;比如:TRUNC (3.56)=3。
Y是正整數,就是四捨五入到小數點後 y 位。TRUNC (5.654,2)=5.65。
y 是負整數,四捨五入到小數點左邊|y|位。TRUNC (351.654,-2)=300。
三、日期函數
日期函數對日期進行運算。常用的日期函數有:
1、ADD_MONTHS(d,n),在某一個日期 d 上,加上指定的月數 n,返回計算後的新日期。
d 表示日期,n 表示要加的月數。
例:
SELECT SYSDATE,add_months(SYSDATE,5) FROM dual;
2、LAST_DAY(d),返回指定日期當月的最後一天。
例:
SELECT SYSDATE,last_day(SYSDATE) FROM dual;
3、ROUND(d[,fmt]),返回一個以 fmt 為格式的四捨五入日期值, d 是日期, fmt 是格式
模型。預設 fmt 為 DDD,即月中的某一天。
Ø ① 如果 fmt 為「YEAR」則舍入到某年的 1 月 1 日,即前半年捨去,後半年作為下一年。
Ø ② 如果 fmt 為「MONTH」則舍入到某月的 1 日,即前月捨去,後半月作為下一月。
Ø ③ 預設為「DDD」,即月中的某一天,最靠近的天,前半天捨去,後半天作為第二天。
Ø ④ 如果 fmt 為「DAY」則舍入到最近的周的週日,即上半周捨去,下半周作為下一週週日。
例:
SELECT SYSDATE,ROUND(SYSDATE),ROUND(SYSDATE,'day'), ROUND(SYSDATE,'month'),ROUND(SYSDATE,'year') FROM dual;
與 ROUND 對應的函數時 TRUNC(d[,fmt])對日期的操作, TRUNC 與 ROUND 非常相似,只是不對日期進行舍入,直接擷取到對應格式的第一天。
4、EXTRACT(fmt FROM d),提取日期中的特定部分。
fmt 為:YEAR、MONTH、DAY、HOUR、MINUTE、SECOND。其中 YEAR、MONTH、DAY可以為 DATE 型別匹配,也可以與 TIMESTAMP 型別匹配;但是 HOUR、MINUTE、SECOND 必須與 TIMESTAMP 型別匹配。
HOUR 匹配的結果中沒有加上時區,因此在中國執行的結果小 8 小時。
例:
SELECT SYSDATE "date", EXTRACT(YEAR FROM SYSDATE)"year", EXTRACT(MONTH FROM SYSDATE)"month", EXTRACT(DAY FROM SYSDATE)"day", EXTRACT(HOUR FROM SYSTIMESTAMP)"hour", EXTRACT(MINUTE FROM SYSTIMESTAMP)"minute", EXTRACT(SECOND FROM SYSTIMESTAMP)"second" FROM dual;
轉換函數將值從一種資料型別轉換為另外一種資料型別。常見的轉換函數有:
1、TO_CHAR(d|n[,fmt])
把日期和數位轉換為制定格式的字串。Fmt是格式化字串
程式碼演示:TO_CHAR對日期的處理
SELECT TO_CHAR(SYSDATE,'YYYY"年"MM"月"DD"日" HH24:MI:SS')"date" FROM dual;
程式碼解析:
在格式化字串中,使用雙引號對非格式化字元進行參照
針對數位的格式化,格式化字元有:
引數 | 範例 | 說明 |
9 | 999 | 指定位置處顯示數位 |
. | 9.9 | 指定位置返回小數點 |
, | 99,99 | 指定位置返回一個逗號 |
$ | $999 | 數位開頭返回一個美元符號 |
EEEE | 9.99EEEE | 科學計數法表示 |
L | L999 | 數位前加一個本地貨幣符號 |
PR | 999PR | 如果數位式負數則用尖括號進行表示 |
程式碼演示:TO_CHAR對數位的處理
SELECT TO_CHAR(-123123.45,'L9.9EEEEPR')"date" FROM dual;
2、TO_DATE(X,[,fmt])
把一個字串以fmt格式轉換成一個日期型別
3、TO_NUMBER(X,[,fmt])
把一個字串以fmt格式轉換為一個數位
程式碼演示:TO_NUM函數
SELECT TO_NUMBER('-$12,345.67','$99,999.99')"num" FROM dual;
1、NVL(X,VALUE)
如果X為空,返回value,否則返回X
例:對工資是2000元以下的員工,如果沒發獎金,每人獎金100元
程式碼演示:NVL函數
SQL> SELECT ENAME,JOB,SAL,NVL(COMM,100) FROM EMP WHERE SAL<2000; ------------------------------------------------------------------- ENAME JOB SAL NVL(COMM,100) SMITH CLERK 800 100 ALLEN SALESMAN 1600 300 WARD SALESMAN 1250 500 MARTIN SALESMAN 1250 1400 TURNER SALESMAN 1500 50 ADAMS CLERK 1100 100 JAMES CLERK 950 100 ------------------------------------------------------------------- 7 rows selected
2、NVL2(x,value1,value2)
如果x非空,返回value1,否則返回value2
例:對EMP表中工資為2000元以下的員工,如果沒有獎金,則獎金為200元,如果有獎金,則在原來的獎金基礎上加100元
程式碼演示:NVL2函數
SQL> SELECT ENAME,JOB,SAL,NVL2(COMM,comm+100,200) "comm" 2 FROM EMP WHERE SAL<2000; ------------------------------------------------------------------- ENAME JOB SAL comm SMITH CLERK 800 200 ALLEN SALESMAN 1600 400 WARD SALESMAN 1250 600 MARTIN SALESMAN 1250 1500 TURNER SALESMAN 1500 150 ADAMS CLERK 1100 200 JAMES CLERK 950 200 MILLER CLERK 1300 200 ------------------------------------------------------------------------------------------------------- 8 rows selected
聚合函數同時對一組資料進行操作,返回一行結果,比如計算一組資料的總和,平均值
等。
名稱 | 作用 | 語法 |
AVG | 平均值 | AVG(表示式) |
SUM | 求和 | SUM(表示式) |
MIN、MAX | 最小值、最大值 | MIN(表示式)、MAX(表示式) |
COUNT | 資料統計 | COUNT(表示式) |
例:求本月所有員工的基本工資總和
程式碼演示:sum函數
SQL> SELECT SUM(sal) FROM emp; ------------------------------------------------------------------- SUM(SAL) 29025
例:求不同部門的平均工資
程式碼演示:AVG函數下的分組查詢
SQL> SELECT DEPTNO,AVG(SAL) FROM EMP GROUP BY DEPTNO; ------------------------------------------------------------------- DEPTNO AVG(SAL) --------- ---------- 30 1566.66666 20 2175 10 2916.66666以上就是oracle的函數有哪些的詳細內容,更多請關注TW511.COM其它相關文章!