ORACLE常用函數功能演示
文檔撰寫:孟祥新
寫在前面:
ORACLE內置函數,相當於C語言中的庫函數,提供了常規數據庫編程中所需的絕大多數基本功能,並且通過函數的組合或嵌套使用,可以發揮其強大的功能。由於這些內置函數都是由ORACLE公司的編程大家所寫,而且其執行代碼是內嵌在ORACLE數據庫系統中的,因此其執行效率極高。
在數據庫編程中能廣泛使用ORACLE所提供的內置函數,將大大提高程序代碼的執行效率。“站在高人的肩膀上,將使你變得更高”。
演示之前的環境設置:
爲了在SQL*PLUS中直觀地顯示函數返回的結果,我將“頭”信息先屏蔽掉。操作如下:
一、單行函數
1. 數值函數
(1) 三角函數
① SIN、ASIN、SINH(正弦、反正弦、雙曲正弦)
② COS、ACOS、COSH(餘弦、反餘弦、雙曲餘弦)
③ TAN、ATAN、TANH(正切、反正切,雙曲正切)
(2) 冪、方根及對數運算函數
① POWER(m, n)(取m的n次冪)
② SQRT(n)(取n的平方根)
③ EXP(n)(取自然對數底e的n次方根)
④ LN(n)(取n的自然對數)
⑤ LOG(m, n)(取以m爲底n的對數)
以上函數功能演示如下:
(3) 數值處理函數
① ABS(n)(取絕對值)
② SIGN(n)(符號函數)
③ CEIL(n)(取不小於n的最小整數)
④ FLOOR(n)(取不大於n的最大整數)
⑤ ROUND(n, [m])(按m精度對n進行4舍5入)
⑥ TRUNC(n, [m])(按m精度對n進行截取)
⑦ MOD(m, n)(取m除以n的餘數)
以上函數功能演示如下:
2. 字符處理函數
(1) 對字符串的大小寫處理的函數
① INITCAP(功能:將字符串中每個單詞的首字母,變換爲大寫。)
② UPPER(功能:將字符串中的所有字母,轉換爲大寫。)
③ LOWER(功能:將字符串中的所有字母,轉換爲小寫。)
以上函數功能演示如下:
(2) 對字符串進行處理的函數
① CONCAT(字符串連接函數,也可用 || 替代)
功能演示如下:
② ASCII(取字符的編碼)
③ CHR(將編碼轉換爲對應的字符)
以上函數功能演示如下:
④ LTRIM(去除左側空格/指定字符)
⑤ RTRIM(去除右側空格/指定字符)
⑥ TRIM(去除兩側的空格/去除指定字符)
以上函數去除空格功能演示如下:
以上函數去除指定字符功能演示如下:
請注意:在用TRIM去除字符串中指定字符(非空格)時的特殊用法。
⑦ LPAD(左側添充空格/指定字符)
⑧ RPAD(右側添充空格/指定字符)
以上函數功能演示如下:
⑨ LENGTH(取字符串的長度)
⑩ SUBSTR(截取子字符串)
用法格式:SUBSTR(string, start [,length])
功能說明:從字符串string的start位置開始向後截取length長度的子串
以上函數功能演示如下:
⑾ INSTR(查找子字符串的位置)
用法格式:INSTR(string, search_string [,n [,m]])
功能說明:從字符串string的第n個字符開始查找search_string第m次出現的位置,如果按條件沒有找到字符串,則返回0
(注意:此函數返回的位置是以原字符串首字符所在位置爲起始點的,首字符位置爲1)
函數功能演示如下:
⑿ REPLACE(子串替換)
用法格式:REPLACE(string, search_string [,replace_string])
功能說明:將字符串string中的所有search_string都替換爲replace_string,如果省略replace_string,則將字符串string中的所有search_string都去掉。
⒀ TRANSLATE(字符轉換)
用法格式:TRANSLATE(string, search_set, replace_set)
功能說明:將string中出現在search_set中的字符轉換爲replace_set相應位置的字符。
以上函數功能演示如下:
3. 日期函數
① SYSDATE(取當前的數據庫系統時間)
② ADD_MONTHS(加減指定的月份)
③ MONTHS_BETWEEN(取兩個日期之間相隔的月數)
④ LAST_DAY(取指定日期所在月的最後一天)
以上函數功能演示如下:
⑤ ROUND(date, ‘format_string’)
功能:按日期掩碼format_string的格式對給定的日期date進行舍/入。
⑥ TRUNC(date, ‘format_string’)
功能:按日期掩碼format_string的格式對給定的日期date進行截取。
以上函數功能演示如下:
4. 類型轉換函數
功能:在數值和字符,以及字符和日期之間進行數據類型的轉換
說明:在ORACLE數據服務器,可以對數值形式的字符串隱式地轉換爲數值類型的數據,也可以將數值類型的數據隱式地轉換爲數值形式的字符串。但也可以進行如下的顯式轉換。
① TO_CHAR(n)(將數值n轉換爲字符類型)
② TO_NUMBER(‘string’)(將字符串string轉換爲數值類型)
知識擴展:常用進制的轉換 |
③ TO_CHAR(date, ‘format_string’)(按照時間掩碼format_string的格式要求,將日期型數據date轉換爲字符型數據)
④ TO_DATE(‘string’, ‘format_string’)(將字符型數據string按照時間掩碼format_string的格式要求,轉換爲相應的日期型數據)
常用的時間格式掩碼如下:
掩碼元素 | 含義 |
YYYY | 四位數年份 (如:2005) |
YY | 二位數年份(如 05) |
Q | 季度(1-4) |
MM | 月份(01-12) |
WW | 年的星期數(1-53),其中第一星期爲年的第一天至第七天 |
W | 月的星期數(1-5),其中第一星期爲月的第一天至第七天 |
DDD | 年的日(1-366) |
DD | 月的日(1-31) |
D | 周的日(1-7),其中週日爲1,週六爲7 |
HH24 | 24小時制(0-23) |
MI | 分鐘(0-59) |
SS | 秒(0-59) |
SSSSS | 自午夜之後的秒(0-86399) |
以上函數功能演示如下:
5. 空值轉換函數
① NVL(expr1, expr2)
功能:如果 expr1 的計算結果爲 null 值,則返回 expr2 的值。如果 expr1 的計算結果不是 null 值,則返回 expr1 的值
② NVL2(expr1, expr2, expr3)
功能:如果expr1非空,則返回expr2的值;如果expr1爲空,則返回expr3的值。
③ NULLIF(expr1, expr2)
功能:比較兩個表達式,如果相等返回空;如果不相等,返回第一個表達式的值。
④ COALESCE(expr1, expr2, ..., exprn)
功能:返回表達式列表中的第一個非空表達式的值。
6. 查看環境參數函數
(1) USER函數 (返回當前用戶名)
(2) USERENV函數
① USERENV('ISDBA') (查看當前用戶是否是DBA)
② USERENV('LANGUAGE') (查看環境所用的字符集)
③ USERENV('TERMINAL') (查看當前用戶終端的標識)
以上函數用法演示如下:
select USERENV('ISDBA'), USERENV('LANGUAGE'), USERENV('TERMINAL') from dual;
(3) SYS_CONTEXT函數
說明:SYS_CONTEXT函數是在ORACLE 8i中新增的,在功能上比USERENV函數更加全面。
用法格式:SYS_CONTEXT('USERENV', '<parameter>')
根據參數parameter來返回相應的信息
① 登錄驗證類型
select SYS_CONTEXT('USERENV', 'AUTHENTICATION_TYPE') from dual;
② 當前登錄數據庫的用戶名
select SYS_CONTEXT('USERENV', 'CURRENT_USER') from dual;
③ 當前登錄客戶端的操作系統用戶名
select SYS_CONTEXT('USERENV', 'OS_USER') from dual;
④ 當前所在客戶機名(包括所在工作組名)
select SYS_CONTEXT('USERENV', 'HOST') from dual;
⑤ 當前所在客戶機/終端名
select SYS_CONTEXT('USERENV', 'TERMINAL') from dual;
⑥ 當前所在客戶端的IP
select SYS_CONTEXT('USERENV', 'IP_ADDRESS') from dual;
⑦ 當前是否爲DBA帳戶
select SYS_CONTEXT('USERENV', 'ISDBA') from dual;
⑧ 當前的字符集
select SYS_CONTEXT('USERENV', 'LANGUAGE') from dual;
⑨ 當前所使用的網絡協議
select SYS_CONTEXT('USERENV', 'NETWORK_PROTOCOL') from dual;
⑩ 當前所使用的日曆
select SYS_CONTEXT('USERENV', 'NLS_CALENDAR') from dual;
⑾ 當前的貨幣單位
select SYS_CONTEXT('USERENV', 'NLS_CURRENCY') from dual;
⑿ 當前的日期格式
select SYS_CONTEXT('USERENV', 'NLS_DATE_FORMAT') from dual;
⒀ 當前的日期語言
select SYS_CONTEXT('USERENV', 'NLS_DATE_LANGUAGE') from dual;
⒁ 當前所在的地域
select SYS_CONTEXT('USERENV', 'NLS_TERRITORY') from dual;
⒂ 當前代理用戶
select SYS_CONTEXT('USERENV', 'PROXY_USER') from dual;
7. DECODE函數
DECODE函數用法格式與說明:
格式: DECODE(col|expression, search1, result1 [, search2, result2 ] [, search3, result3 ] [, ......, ...... ] [, default] ) 說明: 第一個參數可是是表的列,也可以是一個表達式。 如果第一參數的值與search1相等,則函數返回result1的值; 如果第一參數的值與search2相等,則函數返回result2的值;以此類推。 如果第一參數的值與所有的search都不相等,則函數返回default的值。 |
此函數用法示例如下:
二、聚組函數
功能:對一組數據進行運算。
函數 | 功能描述 |
MAX | 最大值 |
MIN | 最小值 |
AVG | 平均值 |
COUNT | 數量值 |
SUM | 總計值 |
以上函數功能演示如下:
三、分析函數
分析函數簡介:ORACLE從8.1.6版開始提供分析函數,分析函數用於計算基於組的某種聚合值,它和聚組函數的不同之處是對於每個組返回多行值,而聚組函數對於每個組只返回一行值。
(ORACLE有一整套分析函數,功能極其強大,用法也非常靈活,關於這一塊的功能演示,請待續……)