oracle的函数有哪些(Oracle)
本教程操作環(huán)境:Windows7系統(tǒng)、Oracle 11g版、Dell G3電腦。
Oracle SQL語句中經(jīng)常使用到Oracle自帶的函數(shù),這些函數(shù)豐富了SQL的語言功能,為Oracle SQL提供了更多的操作性。Oracle函數(shù)可以接受零個(gè)或者多個(gè)輸入?yún)?shù),并返回一個(gè)輸出結(jié)果。 Oracle 數(shù)據(jù)庫中主要使用兩種類型的函數(shù):
1、單行函數(shù):對每一個(gè)函數(shù)應(yīng)用在表的記錄中時(shí),只能輸入一行中的列值作為輸入?yún)?shù)(或常數(shù)),并且返回一個(gè)結(jié)果。
例如1:MOD(X,Y) 是求余函數(shù),返回的X除以Y的余數(shù),其中X和Y可以是列值,也可以是常數(shù)。
例如2:TO_CHAR(X,'YYYYMMDD')是時(shí)間類型轉(zhuǎn)字符串的函數(shù),其中X可以是行中某一時(shí)間類型(date)的列,也可以是一個(gè)時(shí)間類型的常數(shù)。
常用的單行函數(shù)大致以下幾類:
-
字符串函數(shù):對字符串進(jìn)行操作,例如:TO_CHAR()、SUBSTR()、DECODE()等等。
-
數(shù)值函數(shù):對數(shù)值進(jìn)行計(jì)算或操作,返回一個(gè)數(shù)字。例如:ABS()、MOD()、ROUND()等等。
-
轉(zhuǎn)換函數(shù):將一種數(shù)據(jù)類型轉(zhuǎn)換成另外一種類型:例如:TO_CHAR()、TO_NUMBER()、TO_DATE()等等。
-
日期函數(shù):對時(shí)間和日期進(jìn)行操作的函數(shù)。例如:TRUNC()、SYSDATE()、ADD_MONTHS()等等。
2、聚合函數(shù):聚合函數(shù)同時(shí)可以對多行數(shù)據(jù)進(jìn)行操作,并返回一個(gè)結(jié)果。比如 SUM(x)返回結(jié)果集中 x 列的總合。
一、字符串函數(shù)
字符函數(shù)接受字符參數(shù),這些參數(shù)可以是表中的列,也可以是一個(gè)字符串表達(dá)式。
常用的字符函數(shù):
|
函數(shù) |
說明 |
|
ASCII(X) |
返回字符X的ASCII碼 |
|
CONCAT(X,Y) |
連接字符串X和Y |
|
INSTR(X,STR[,START][,N) |
從X中查找str,可以指定從start開始,也可以指定從n開始 |
|
LENGTH(X) |
返回X的長度 |
|
LOWER(X) |
X轉(zhuǎn)換成小寫 |
|
UPPER(X) |
X轉(zhuǎn)換成大寫 |
|
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個(gè)字符,缺省length,默認(rèn)到結(jié)尾 |
上面各函數(shù)的例子:
|
示例 |
示例結(jié)果 |
|
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 |
二、數(shù)字函數(shù)
數(shù)字函數(shù)接受數(shù)字參數(shù),參數(shù)可以來自表中的一列,也可以是一個(gè)數(shù)字表達(dá)式。
|
函數(shù) |
說明 |
示例 |
|
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的對數(shù) |
LOG(2,4)=2 |
|
MOD(X,Y) |
X除以Y的余數(shù) |
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位截?cái)?/p> |
TRUNC(3.456,2)=3.45 |
說明:
1. ROUND(X[,Y]),四舍五入。
在缺省 y 時(shí),默認(rèn) y=0;比如:ROUND(3.56)=4。
y 是正整數(shù),就是四舍五入到小數(shù)點(diǎn)后 y 位。ROUND(5.654,2)=5.65。
y 是負(fù)整數(shù),四舍五入到小數(shù)點(diǎn)左邊|y|位。ROUND(351.654,-2)=400。
2. TRUNC(x[,y]),直接截取,不四舍五入。
在缺省 y 時(shí),默認(rèn) y=0;比如:TRUNC (3.56)=3。
Y是正整數(shù),就是四舍五入到小數(shù)點(diǎn)后 y 位。TRUNC (5.654,2)=5.65。
y 是負(fù)整數(shù),四舍五入到小數(shù)點(diǎn)左邊|y|位。TRUNC (351.654,-2)=300。
三、日期函數(shù)
日期函數(shù)對日期進(jìn)行運(yùn)算。常用的日期函數(shù)有:
1、ADD_MONTHS(d,n),在某一個(gè)日期 d 上,加上指定的月數(shù) n,返回計(jì)算后的新日期。
d 表示日期,n 表示要加的月數(shù)。
例:
SELECT SYSDATE,add_months(SYSDATE,5) FROM dual;
登錄后復(fù)制
2、LAST_DAY(d),返回指定日期當(dāng)月的最后一天。
例:
SELECT SYSDATE,last_day(SYSDATE) FROM dual;
登錄后復(fù)制
3、ROUND(d[,fmt]),返回一個(gè)以 fmt 為格式的四舍五入日期值, d 是日期, fmt 是格式
模型。默認(rèn) fmt 為 DDD,即月中的某一天。
? ① 如果 fmt 為“YEAR”則舍入到某年的 1 月 1 日,即前半年舍去,后半年作為下一年。
? ② 如果 fmt 為“MONTH”則舍入到某月的 1 日,即前月舍去,后半月作為下一月。
? ③ 默認(rèn)為“DDD”,即月中的某一天,最靠近的天,前半天舍去,后半天作為第二天。
? ④ 如果 fmt 為“DAY”則舍入到最近的周的周日,即上半周舍去,下半周作為下一周周日。
例:
SELECT SYSDATE,ROUND(SYSDATE),ROUND(SYSDATE,'day'), ROUND(SYSDATE,'month'),ROUND(SYSDATE,'year') FROM dual;
登錄后復(fù)制
與 ROUND 對應(yīng)的函數(shù)時(shí) TRUNC(d[,fmt])對日期的操作, TRUNC 與 ROUND 非常相似,只是不對日期進(jìn)行舍入,直接截取到對應(yīng)格式的第一天。
4、EXTRACT(fmt FROM d),提取日期中的特定部分。
fmt 為:YEAR、MONTH、DAY、HOUR、MINUTE、SECOND。其中 YEAR、MONTH、DAY可以為 DATE 類型匹配,也可以與 TIMESTAMP 類型匹配;但是 HOUR、MINUTE、SECOND 必須與 TIMESTAMP 類型匹配。
HOUR 匹配的結(jié)果中沒有加上時(shí)區(qū),因此在中國運(yùn)行的結(jié)果小 8 小時(shí)。
例:
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;
登錄后復(fù)制
四、轉(zhuǎn)換函數(shù)
轉(zhuǎn)換函數(shù)將值從一種數(shù)據(jù)類型轉(zhuǎn)換為另外一種數(shù)據(jù)類型。常見的轉(zhuǎn)換函數(shù)有:
1、TO_CHAR(d|n[,fmt])
把日期和數(shù)字轉(zhuǎn)換為制定格式的字符串。Fmt是格式化字符串
代碼演示:TO_CHAR對日期的處理
SELECT TO_CHAR(SYSDATE,'YYYY"年"MM"月"DD"日" HH24:MI:SS')"date" FROM dual;
登錄后復(fù)制
代碼解析:
在格式化字符串中,使用雙引號(hào)對非格式化字符進(jìn)行引用
針對數(shù)字的格式化,格式化字符有:
|
參數(shù) |
示例 |
說明 |
|
9 |
999 |
指定位置處顯示數(shù)字 |
|
. |
9.9 |
指定位置返回小數(shù)點(diǎn) |
|
, |
99,99 |
指定位置返回一個(gè)逗號(hào) |
|
$ |
$999 |
數(shù)字開頭返回一個(gè)美元符號(hào) |
|
EEEE |
9.99EEEE |
科學(xué)計(jì)數(shù)法表示 |
|
L |
L999 |
數(shù)字前加一個(gè)本地貨幣符號(hào) |
|
PR |
999PR |
如果數(shù)字式負(fù)數(shù)則用尖括號(hào)進(jìn)行表示 |
代碼演示:TO_CHAR對數(shù)字的處理
SELECT TO_CHAR(-123123.45,'L9.9EEEEPR')"date" FROM dual;
登錄后復(fù)制
2、TO_DATE(X,[,fmt])
把一個(gè)字符串以fmt格式轉(zhuǎn)換成一個(gè)日期類型
3、TO_NUMBER(X,[,fmt])
把一個(gè)字符串以fmt格式轉(zhuǎn)換為一個(gè)數(shù)字
代碼演示:TO_NUM函數(shù)
SELECT TO_NUMBER('-$12,345.67','$99,999.99')"num" FROM dual;
登錄后復(fù)制
五、其它單行函數(shù)
1、NVL(X,VALUE)
如果X為空,返回value,否則返回X
例:對工資是2000元以下的員工,如果沒發(fā)獎(jiǎng)金,每人獎(jiǎng)金100元
代碼演示:NVL函數(shù)
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
登錄后復(fù)制
2、NVL2(x,value1,value2)
如果x非空,返回value1,否則返回value2
例:對EMP表中工資為2000元以下的員工,如果沒有獎(jiǎng)金,則獎(jiǎng)金為200元,如果有獎(jiǎng)金,則在原來的獎(jiǎng)金基礎(chǔ)上加100元
代碼演示:NVL2函數(shù)
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
登錄后復(fù)制
六、聚合函數(shù)
聚合函數(shù)同時(shí)對一組數(shù)據(jù)進(jìn)行操作,返回一行結(jié)果,比如計(jì)算一組數(shù)據(jù)的總和,平均值
等。
|
名稱 |
作用 |
語法 |
|
AVG |
平均值 |
AVG(表達(dá)式) |
|
SUM |
求和 |
SUM(表達(dá)式) |
|
MIN、MAX |
最小值、最大值 |
MIN(表達(dá)式)、MAX(表達(dá)式) |
|
COUNT |
數(shù)據(jù)統(tǒng)計(jì) |
COUNT(表達(dá)式) |
例:求本月所有員工的基本工資總和
代碼演示:sum函數(shù)
SQL> SELECT SUM(sal) FROM emp; ------------------------------------------------------------------- SUM(SAL) 29025
登錄后復(fù)制
例:求不同部門的平均工資
代碼演示:AVG函數(shù)下的分組查詢
SQL> SELECT DEPTNO,AVG(SAL) FROM EMP GROUP BY DEPTNO; ------------------------------------------------------------------- DEPTNO AVG(SAL) --------- ---------- 30 1566.66666 20 2175 10 2916.66666
登錄后復(fù)制
推薦教程:《Oracle教程》
以上就是oracle的函數(shù)有哪些的詳細(xì)內(nèi)容,更多請關(guān)注風(fēng)君子博客其它相關(guān)文章!
總結(jié)
以上是生活随笔為你收集整理的oracle的函数有哪些(Oracle)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: word如何设置首字下沉效果呢(Word
- 下一篇: 抽象类的作用是什么?