oracle常用函數介紹


Oracle函數

Oracle SQL提供了用於執行特定操作的專用函數,這些函數大大增強了SQL語言的功能。函數可以接受零個或者多個輸入參數,並返回一個輸出結果。Oracle數據庫中主要使用兩種類型的函數:

  1. 單行函數:對每一個函數應用在表的記錄中時,只能輸入一行結果,返回一個結果,比如:MOD(x,y)返回x除以y的余數(xy可以是兩個整數,也可以是表中的整數列)。常用的單行函數有:
  • 字符函數:對字符串操作。
  • 數字函數:對數字進行計算,返回一個數字。
  • 轉換函數:可以將一種數據類型轉換為另外一種數據類型。
  • 日期函數:對日期和時間進行處理。
  1. 聚合函數:聚合函數同時可以對多行數據進行操作,並返回一個結果。比如SUM(x)返回結果集中x列的總合。

 

目錄大綱

Oracle函數 1

² 字符函數 2

² 數字函數 3

² 日期函數 4

² 轉換函數 6

² 其他單行函數 8

² 聚合函數 9

 

² 字符函數

 

字符函數接受字符參數,這些參數可以是表中的列,也可以是一個字符串表達式。下表列出了常用的字符函數。

 

函數

說明

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的字串,從staart處開始,截取length個字符,缺省length,默認到結尾。

表1  字符函數

示例

示例結果

SELECT ASCII('a') FROM DUAL

97

SELECT CONCAT('Hello', ' world') FROM DUAL

Hello world

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 '=='||LTRIM('   HELLO===') FROM DUAL

==HELLO===

SELECT RTRIM('===HELLO===', '=') FROM DUAL

===HELLO

SELECT '='||TRIM('   HELLO   ')||'=' FROM DUAL

=HELLO=

SELECT TRIM('=' FROM '===HELLO===') FROM DUAL

HELLO

SELECT REPLACE('ABCDE','CD','AAA') FROM DUAL

ABAAAE

SELECT SUBSTR('ABCDE',2) FROM DUAL

BCDE

SELECT SUBSTR('ABCDE',2,3) FROM DUAL

BCD

表2  字符函數示例

² 數字函數

數字函數接受數字參數,參數可以來自表中的一列,也可以是一個數字表達式。

 

函數

說明

示例

ABS(x)

x絕對值

ABS(-3)=3

ACOS(x)

x的反余弦

ACOS(1)=0

COS(x)

余弦

COS(1)=1.57079633

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)

xy次冪

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

表3  數字函數

 

說明:

  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

 

  1. 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表示要加的月數。

 

圖1  ADD_MONTHS函數示

  1. LAST_DAY(d),返回指定日期當月的最后一天。

 

 

圖2  LAST_DAY函數示例

 

  1. ROUND(d[,fmt]),返回一個以fmt為格式的四舍五入日期值,d是日期,fmt是格式模型。默認fmtDDD,即月中的某一天。
  • 如果fmt為“YEAR”則舍入到某年的11日,即前半年舍去,后半年作為下一年。
  • 如果fmt為“MONTH”則舍入到某月的1日,即前月舍去,后半月作為下一月。
  • 默認為“DDD”,即月中的某一天,最靠近的天,前半天舍去,后半天作為第二天。
  • 如果fmt為“DAY”則舍入到最近的周的周日,即上半周舍去,下半周作為下一周周日。

 

圖3  ROUND函數示例

 

與ROUND對應的函數時TRUNC(d[,fmt])對日期的操作,TRUNCROUND非常相似,只是不對日期進行舍入,直接截取到對應格式的第一天。

 

  1. EXTRACT(fmt FROM d),提取日期中的特定部分。

 

fmt為:YEARMONTHDAYHOURMINUTESECOND。其中YEARMONTHDAY可以為DATE類型匹配,也可以與TIMESTAMP類型匹配;但是HOURMINUTESECOND必須與TIMESTAMP類型匹配。

 

HOUR匹配的結果中沒有加上時區,因此在中國運行的結果小8小時。

 

圖4  EXTRACT函數示例

 

² 轉換函數

 

轉換函數將值從一種數據類型轉換為另外一種數據類型。常用的轉換函數有:

 

  1. TO_CHAR(d|n[,fmt])

把日期和數字轉換為制定格式的字符串。fmt是格式化字符串,日期的格式化字符串前面已經學習過。

 

代碼演示:TO_CHAR對日期的處理

SQL> SELECT TO_CHAR(SYSDATE,'YYYY""MM""DD"" HH24:MI:SS') "date"  ①

  2  FROM DUAL;

 

date

-----------------------

2009081112:06:00

代碼解析:

① 在格式化字符串中,使用雙引號對非格式化字符進行引用。

針對數字的格式化,格式化字符有:

 

參數

示例

說明

9

999

指定位置處顯示數字。

.

9.9

指定位置返回小數點

,

99,99

指定位置返回一個逗號

$

$999

數字開頭返回一個美元符號

EEEE

9.99EEEE

科學計數法表示

L

L999

數字前加一個本地貨幣符號

PR

999PR

如果數字式負數則用尖括號進行表示

表4  數字格式化字符

 

代碼演示:TO_CHAR對數字的處理

SQL> SELECT TO_CHAR(-123123.45,'L9.9EEEEPR') "date"

  2  FROM DUAL

  3  /

date

--------------------

 <1.2E+05>

 

  1. TO_DATE(x [,fmt])

把一個字符串以fmt格式轉換為一個日期類型,前面已經學習過。

 

  1. TO_NUMBER(x[,fmt])

把一個字符串以fmt格式轉換為一個數字。fmt格式字符參考表3

 

代碼演示:TO_NUM函數

SQL> SELECT TO_NUMBER('-$12,345.67','$99,999.99') "NUM"

  2  FROM DUAL

  3  /

 

   NUM

---------------

 -12345.67

 

² 其他單行函數

  1. NVL(x,value)

如果x為空,返回value,否則返回x

案例7:對工資是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

 

  1. NVL2(x,value1,value2)

如果x非空,返回value1,否則返回value2

案例8:對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(表達式)

表 5  聚合函數

 

案例9:求本月所有員工的基本工資總和。

代碼演示:SUM函數

SQL> select sum(sal) from emp;

  SUM(SAL)

----------------

     29025

 

案例10:求不同部門的平均工資。

 

代碼演示:AVG函數下的分組查詢

SQL> SELECT DEPTNO,AVG(SAL) FROM EMP GROUP BY DEPTNO;

 

DEPTNO   AVG(SAL)

---------      ----------

    30    1566.66666

    20    2175

    10    2916.66666


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM