單行函數分爲:字符函數、數字函數、日期函數、轉換函數、通用函數。
在oracle中,對字符串進行操作的時候,必須的寫完整的sql語句。例如:要將hello裝換成大寫:
select upper('hello') from emp;
這樣顯示的結果你就會發現出現了14行,記錄查詢就會很不方便。所以在oracle中就有一個虛擬的表 dual;
select upper('hello') from dual;
1、字符函數:主要進行字符串的操作。
UPPER(字符串|列):將輸入字符串轉換成大寫返回。
LOWER(字符串|列):將輸入的字符串轉換成小寫返回。
INITCAOP(字符串|列):開頭首字母大寫。
LENGTH(字符串|列):返回字符串的長度。
REPLACE(字符串|列,'old string','new string'):替換。
SUBSTR(字符串|列,開始點[,結束點]):截取字符串。例:要查詢的一個人名的信息:
select * from emp where ename=UPPER('&str');
其中“&”是屬於替代變量,即要讓你輸入的內容。
②將所有的僱員的姓名小寫返回
select lower(ename) from emp;
2、數字函數
round(數字|列[,保留小數的位數]);四捨五入
trunc(數字|列[,保留小數的位數]):捨棄制定位置的數字。
mod(數字1,數字2):取模,取餘數。
3.日期函數:
取當前日期:
select sysdate from dual;
SYSDATE
-----------
2012/4/17 1
日期+數字:表示若干天后的日期
日期-數字:表示若干天前的日期
日期(大)-日期(小):表示兩個日期的相隔的天數。
last_day(日期):求出指定日期的在本月的最後一天
select last_day(sysdate) from dual;
LAST_DAY(SYSDATE)
-----------------
2012/4/30 10:53:0
next_day(日期,星期數):求出下一個指定星期x的日期;
select next_day(sysdate,'星期一') 下週一的日期 from dual;
NEXT_DAY(SYSDATE,'星期一')
--------------------------
2012/4/23 10:55:39
add_months(日期,數字):求出若干月之後的日期
select add_months(sysdate,4) from dual;
ADD_MONTHS(SYSDATE,4)
---------------------
2012/8/17 10:57:31
months_between(日期1,日期2):求出兩個日期之間相隔的月數。
select months_between(sysdate,hiredate) from emp;
4、轉換函數
轉換函數是將 數字(number)、字符串(varchar2)、日期(date) 之間互相轉換。
to_char(字符串|列,格式字符串):將日期轉化成要求的格式返回
select to_char(sysdate,'yyyy-MM-dd') 日期 from dual;
日期
----------
2012-04-17
想將數字前面的0去掉的話,可以加一個‘fm’:
select to_char(sysdate,'fmyyyy-MM-dd') 日期 from dual;
日期
----------
2012-4-17
to_char()也可以格式化數字:例如將9832874293647格式化成9,832,874,293,647的形式。
select to_char(9832874293647,'9,999,999,999,999') from dual;
其中9表示的一位數字
to_date(字符串|列,格式字符串):將字符串轉化成要求的格式日期返回
select to_date('20120909','yyyy-mm-dd') from dual;
TO_DATE('20120909','YYYY-MM-DD
------------------------------
2012/9/9
to_number(字符串):轉化成數字。
select to_number('3')+to_number('3') from dual;
這個加法運算下邊也可以實現:
select '3'+'3' from dual;
5、通用函數
nvl():處理null,將空轉化成0
select ename,sal,comm,(sal+nvl(comm,0))*12 from emp;
decode():多條件多數值判斷。
decode(數值|列,判斷值1,顯示值1,判斷值2,顯示值2,判斷值3,顯示值3...)
這些都是成對出現的。例如:我們將僱員中所有人的職位信息轉化成中文
select ename,decode(job,'SALESMAN','銷售員','CLERK','辦事員','MANAGER','經理','ANALYST','分析員','PRESIDENT','主席') from emp;