在Oracle OCP考試中,至關一部分知識點涉及到對於Oracle常見函數的考查。儘管Oracle官方文檔SQL Language Reference中Functions一章內列舉了全部Oracle自帶函數,但若是要系統的看一遍,仍是要花費至關的精力,更況且仍是英文呢。若是碰到一個不熟悉的,就查一下,不常常用,又很容易遺忘。下面就對Oracle常見函數作個整理,方便之後查詢。oracle
1、 大小寫轉換函數函數
1. LOWER函數orm
LOWER函數將字符以小寫形式輸出。其語法爲LOWER(char)。server
例如:htm
SQL> select lower(100+100),lower(sysdate),lower('HELLO') from dual;ci
LOW LOWER(SYS LOWER
--- --------- -----
200 25-sep-14 hello文檔
注意:返回的均是字符類型,在執行LOWER函數以前先計算數據和日期表達式,並隱式轉換爲字符數據。字符串
2. UPPER函數get
UPPER函數將字符以大寫形式輸出。其語法爲UPPER(char)。string
例如:
SQL> select upper('hello world') from dual;
UPPER('HELL
-----------
HELLO WORLD
3. INITCAP函數
INITCAP函數將字符串中每一個單詞的第一個字母大寫,而該單詞的剩餘字母小寫。
例如:
SQL> select initcap('hello WORLD! that is funny!') from dual;
INITCAP('HELLOWORLD!THATISF
---------------------------
Hello World! That Is Funny!
2、 字符操做函數
1. CONCAT函數
CONCAT函數用於鏈接兩個字符串。有兩個參數,語法爲CONCAT(s1,s2)。
例如:
SQL> select concat('hello','world') from dual;
CONCAT('HE
----------
helloworld
SQL> select concat(concat(ename,'''s job is '),job) from emp where empno=7788;
CONCAT(CONCAT(ENAME,'''SJOBIS
-----------------------------
SCOTT's job is ANALYST
2. LENGTH函數
LENGTH函數返回字符串的字符數,包括空格,製表符和特殊字符。其語法爲LENGTH(s)。
例如:
SQL> select length('hello world!') from dual;
LENGTH('HELLOWORLD!')
---------------------
12
3. LPAD和RPAD函數
LPAD和RPAD函數分別被稱爲左填充和右填充函數。它們分別在給定字符串左邊或右邊填充指定數量的字符。其語法爲LPAD(s,n,p)和RPAD(s,n,p),其中s表示源字符串,n表示返回字符串的最終長度,p指定用於填充的字符串。注意:若是參數n小於或者等於源字符串s的長度,就不會添加任何字符,此時只返回源字符串s的前n個字符。p默認爲空格。
例如:
SQL> select lpad('hello',10,'*'),lpad('hello',10,'*#'),lpad('hello',10),lpad('hello',4,'*') from dual;
LPAD('HELL LPAD('HELL LPAD('HELL LPAD
---------- ---------- ---------- ----
*****hello *#*#*hello hello hell
SQL> select rpad('hello',10,'*'),rpad('hello',10,'*#'),rpad('hello',10),rpad('hello',4,'*') from dual;
RPAD('HELL RPAD('HELL RPAD('HELL RPAD
---------- ---------- ---------- ----
hello***** hello*#*#* hello hell
4. TRIM函數
TRIM函數從字符串的開頭或者結尾刪除一些字符。其語法爲TRIM([trailing|leading|both] trimstring from s)。其中
TRIM(s)刪除輸入字符串兩邊的空格
TRIM(trailing trimstring from s)從字符串s的結尾刪除全部trimstring(若是存在的話)。
TRIM(leading trimstring from s)從字符串s的開頭刪除全部trimstring。
TRIM(both trimstring from s)從字符串s的開頭和結尾刪除全部trimstring。
SQL> select trim(both '*' from '***hello****') from dual;
TRIM(
-----
hello
SQL> select trim(trailing '*' from '***hello****') from dual;
TRIM(TRA
--------
***hello
SQL> select trim(leading '*' from '***hello****') from dual;
TRIM(LEAD
---------
hello****
注意:trimstring只能是一個字符。
SQL> select trim(leading '*!' from '*!*!hello') from dual;
select trim(leading '*!' from '*!*!hello') from dual
*
ERROR at line 1:
ORA-30001: trim set should have only one character
5. INSTR函數(In-string)
INSTR函數肯定搜索字符串在給定字符串中的位置。它返回數字位置,若是搜索字符串不存在,則該函數返回0。其語法爲INSTR(source string,search string,[search start position],[nth occurrence])。其中,後兩個參數是可選的,search start position的默認值是1,即source string的開頭。nth occurrence的默認值是1,即第一次出現。
例如:
SQL> select instr('1*3*5*7*9','*',-3,2) from dual;
INSTR('1*3*5*7*9','*',-3,2)
---------------------------
4
SQL> select instr('1*3*5*7*9','*') from dual;
INSTR('1*3*5*7*9','*')
----------------------
2
SQL> select instr('1*3*5*7*9','*',2) from dual;
INSTR('1*3*5*7*9','*',2)
------------------------
2
6. SUBSTR函數(Substring)
SUBSTR函數從給定源字符串中給定的位置開始,提取指定長度的子字符串。其語法爲SUBSTR(source string,start position,[number of characters to extrace])。最後一個參數可選,假若沒有指定,默認從start position到source string結尾的字符數。
例如:
SQL> select substr('1*3*5*7',3) from dual;
SUBST
-----
3*5*7
SQL> select substr('1*3*5*7',3,2) from dual;
SU
--
3*
SQL> select substr('1*3*5*7',-3,2) from dual;
SU
--
5*
7. REPLACE函數
REPLACE函數用替換項取代源字符串中出現的全部搜索項。其語法爲REPLACE(source string,search item,[replacement term])。replacement term默認爲空字符。
例如:
SQL> select replace('1*3*5*7','*','->') from dual;
REPLACE('1
----------
1->3->5->7
SQL> select replace('1*3*5*7','*') from dual;
REPL
----
1357
3、 數字函數
1. 數字round函數
ROUND函數依據指定的小數精度對數值進行四捨五入運算。其語法爲ROUND(source number,decimal precision)。decimal precision參數指定舍入的精度。默認是0,即對源數字四捨五入到整數。若是指定的小數精度n爲正數,則要舍入的有效數字在小數點右邊(n+1)個位置。若是n爲負數,則要舍入的有效數字在小數點左邊n個位置。
例如:
SQL> select round(145.78,-1) from dual;
ROUND(145.78,-1)
----------------
150
SQL> select round(145.78) from dual;
ROUND(145.78)
-------------
146
SQL> select round(145.78,1) from dual;
ROUND(145.78,1)
---------------
145.8
2. TRUNC函數(Truncate)
TRUNC函數依據指定的小數精度對數值進行截取運算。其語法爲TRUNC(source number,decimal precision)。
例如:
SQL> select trunc(145.78,-1) from dual;
TRUNC(145.78,-1)
----------------
140
SQL> select trunc(145.78) from dual;
TRUNC(145.78)
-------------
145
SQL> select trunc(145.78,1) from dual;
TRUNC(145.78,1)
---------------
145.7
3. MOD函數(Modulus)
MOD函數返回除法運算的餘數。
例如:
SQL> select mod(5,2) from dual;
MOD(5,2)
----------
1
SQL> select mod(5.2,2.2) from dual;
MOD(5.2,2.2)
------------
.8
4、 日期函數
1. MONTHS_BETWEEN函數
MONTHS_BETWEEN函數返回兩個日期參數之間月數的數值。其語法爲MONTHS_BETWEEN(date1,date2)。該函數計算date1和date2之間月份的差值(每個月31天),即date1-date2。返回值可能由整數和小數部分組成。其中,整數表示這兩個日期之間相差的月數。小數部分表示剩餘的天數和時間,以31天的月份爲基礎。
例如:
SQL> select months_between(sysdate,sysdate-31) from dual;
MONTHS_BETWEEN(SYSDATE,SYSDATE-31)
----------------------------------
1
SQL> select months_between('2-MAR-2014','1-FEB-2014') from dual;
MONTHS_BETWEEN('2-MAR-2014','1-FEB-2014')
-----------------------------------------
1.03225806
SQL> select 1/31 from dual;
1/31
----------
.032258065
--能夠看出小數部分是以31天爲基礎的。
2. ADD_MONTHS函數
ADD_MONTHS函數語法爲ADD_MONTHS(date,number of months),即計算指定月份添加到指定date後的日期。月數能夠爲負。
例如:
SQL> select add_months('1-MAR-2014',1) from dual;
ADD_MONTH
---------
01-APR-14
SQL> select add_months('1-MAR-2014',2.9) from dual;
ADD_MONTH
---------
01-MAY-14
SQL> select add_months('1-MAR-2014',-2.9) from dual;
ADD_MONTH
---------
01-JAN-14
3. NEXT_DAY函數
NEXT_DAY返回在指定日期後下一次出現星期幾的日期。其語法爲NEXT_DAY(start date,day of the week)。函數計算在start date以後day of the week下一次出現的日期。day of the week能夠是字符值或者整數值。其中,字符值至少是星期名稱的前三個字符,例如,星期日能夠表示爲sun,sund,sunda或者Sunday。對於整數,1表示星期日,2表示星期一,以此類推。
例如:19-SEP-2014是週五
SQL> select next_day('19-SEP-2014',5) from dual;
NEXT_DAY(
---------
25-SEP-14
SQL> select next_day('19-SEP-2014','tue') from dual;
NEXT_DAY(
---------
23-SEP-14
SQL> select next_day('19-SEP-2014','SUNDAY') from dual;
NEXT_DAY(
---------
21-SEP-14
4. LAST_DAY函數
LAST_DAY函數提取指定日期所屬的月,並計算該月最後一天的日期。其語法爲LAST_DAY(date)。
例如:
SQL> select last_day('19-SEP-2014') from dual;
LAST_DAY(
---------
30-SEP-14
5. 日期ROUND函數
日期ROUND函數依據指定的日期精度格式對日期進行舍入運算。其語法爲ROUND(source date,[date precision format]).source date表示任意日期。date precision format包括世紀(CC),年(YYYY),季度(Q),月(MM),星期(W),日(DD),時(HH)和分(MI)。
若是日部分大於16,則會入到下一個月,不然舍到當月。若是月在1和6之間,則會舍到當年開頭的日期,不然入到下一年開頭的日期。
例如:
查詢的時間爲:2014-09-26 04:44:38
SQL> select round(sysdate) day,round(sysdate,'w')week,round(sysdate,'month')month,round(sysdate,'year')year from dual;
DAY WEEK MONTH YEAR
--------- --------- --------- ---------
26-SEP-14 29-SEP-14 01-OCT-14 01-JAN-15
由於查詢時間是4點,沒有查過12點,故DAY是當天。由於本月1號是週一,WEEK返回的是查詢時間起,下一個週一的日期,即29-SEP-14。由於查詢時間是26號,超過16號,故MONTH需入到下一個月。由於查詢時間是9月,超過6月,故入到下一年。
6. 日期TRUNC函數
日期TRUNC函數依據指定的日期精度格式對日期進行截取運算。其語法爲TRUNC(source date,[date precision format])。date precision format指定截取的精度,默認的截取精度是日。這就意味着將source date的全部時間都設置爲00:00:00(00時、00分和00秒)。在月級別上的截取將source date的日期設置爲該月的第一天。年級別的截取返回當年開頭的日期。
例如:
SQL> select trunc(sysdate) day,trunc(sysdate,'w')week,trunc(sysdate,'month')month,trunc(sysdate,'year')year from dual;
DAY WEEK MONTH YEAR
--------- --------- --------- ---------
26-SEP-14 22-SEP-14 01-SEP-14 01-JAN-14
惟一須要注意的是WEEK,由於本月1號是週一,WEEK返回的是本週週一的日期。