所謂的單行函數指的就是完成某一具體功能的操作函數,例如:轉大寫或日期格式的轉換等等。
格式:”返回值 函數名稱(參數)“。
按類型分爲:字符串函數、數值函數、日期函數、轉換函數、通用函數。
字符串函數:
1. 字符串 UPPER(列 | 字符串) 將傳入的字符串變爲大寫字母形式;
2. 字符串 LOWER(列 | 字符串) 將傳入的字符串變爲小寫字母形式;
3. 字符串 INITCAP(列 | 字符串) 開頭首字母大寫,其他字母全變爲小寫;
4. 數字 LENGTH(列 | 字符串) 取得指定字符串的長度;
5. 字符串 SUBSTR(列 | 字符串,開始索引,[長度]) 進行字符串的截取,如未設定長度,則從開始索引一直截取到結尾;
6. 字符串 REPLACE(列 | 字符串,舊內容,新內容) 將指定字符串的數據由舊數據替換爲新數據。
示意:
select upper('hello') from dual; //HELLO
select lower(ename) from emp;
select * from emp where ename=upper('&inputname');
select ename,initcap(ename) from emp;
select * from emp where length(ename)=5;
select substr('helloworld',6) from dual; //world
select substr('helloworld',0,5) from dual; //hello
select ename,substr(ename,length(ename)-2) from emp; //後三位
select ename,substr(ename,-3) from emp; //後三位(只有Oracle數據庫纔有)
數值函數:
1. 數字 ROUND(列 | 數字 [,小數位]) 實現數據的四捨五入;
2. 數字 TRUNC(列 | 數字 [,小數位]) 實現數據的截取,即不進位;
3. 數字 MOD(列 | 數字 ,列 | 數字 ) 求模(計算餘數);
示意:
select round(157.5616) from dual; //158
select round(157.5616,2) from dual; //157.56
select round(157.5616,-2) from dual; //200
select trunc(157.5616) from dual; //157
select trunc(157.5616,1) from dual; //157.5
select mod(10,3) from dual; //1
日期函數:
進行日期操作,必須知道當前日期是什麼;僞列:SYSDATE;
有三個操作公式:
·日期+數字=日期(若干天之後的日期);
·日期-數字=日期(若干天之前的日期);
·日期-日期=數字(天數);
示例:
select sysdate-7,sysdate+120 from dual;
有四個日期處理函數:
1. 日期 ADD_MONTHS(列 | 日期,月數) 在指定的日期上增加若干個之後的日期;
2. 數字 MONTHS_BETWEEN(列 | 日期,列 | 日期) 返回兩個日期之間的所經歷的月數;
3. 日期 LAST_DAY(列 | 日期) 取得指定日期所在月數的最後一天;
4. 日期 NEXT_DAY(列 | 日期,'星期X') 返回下一個指定的一週時間數對應的日期。
示例:
select add_months(sysdate,5) from dual;
select empno,ename,hiredate,months_between(sysdate,hiredate) from emp;
select * from emp where last_day(hiredate)-2 from emp;
select * from emp where hiredate=last_day(hiredate)-2;
select next_day(sysdate,'星期二') from dual;
select empno,ename,hiredate,trunc(months_between(sysdate,hiredate)/12) year from emp; //年
select empno,ename,hiredate,trunc(months_between(sysdate,hiredate)/12) year,trunc(mod(months_between(sysdate,hiredate),12)) months from emp; //年、月
add_months(hiredate,months_between(sysdate-hiredate)) //去除年、月對日期的影響,僱傭日期+僱傭日期至今爲止經歷的月數:
select empno,ename,hiredate,trunc(months_between(sysdate,hiredate)/12) year,trunc(mod(months_between(sysdate,hiredate),12)) months,trunc(sysdate-add_months(hiredate,months_between(sysdate,hiredate))) day from emp;
轉換函數
1. 字符串 TO_CHAR(列 | 日期 | 數字,轉換格式) 將日期或數字格式化未指定結構的字符串;
2. 日期 TO_DATE(列 | 字符串,轉換格式) 按照指定的轉換格式編寫字符串後變爲日期型數據;
3. 數字 TO_NUMBER(列 | 字符串) 將字符串變爲數字;
標記:
·日期:年(yyyy)、月(mm)、日(dd);
·時間:時(hh、hh24)、分(mi)、秒(ss);
·數字:任意數字(9)、本地貨幣符號(L)。
示例:
select to_char(sysdate,'yyyy-mm-dd') from dual;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
select to_char(sysdate,'yyyy'),to_char(sysdate,'mm'),to_char(sysdate,'dd') from dual;
select * from emp where to_char(hiredate,'mm')=2;
select to_char(931287407209,'L999,999,999,999,999,999,999') from dual;
select to_date('1989-10-19','yyyy-mm-dd') from dual;
select to_number('1') + to_number('2') from dual;
通用函數
1. 數字 NVL(列 | NULL,默認值) 如果傳入的內容是NULL,則使用默認數值處理,如果不是NULL則使用原始數值處理;
2. 數據類型 DECODE(列 | 字符串 | 數值,比較內容1,顯示內容1,比較內容2,顯示內容2,...[,默認顯示內容]) 設置的內容會與每一個比較內容進行比較,如果內容相同,則會使用顯示內容進行輸出,如果都不相同,則使用最後的默認信息輸出。
示例:
select empno,ename,sal,comm,(sal+comm)*12 from emp; //沒有佣金的僱員的年薪結果爲空
select empno,ename,sal,comm,(sal+nvl(comm,0))*12 from emp;
select ename,job from emp;
select ename,job,decode(job,'CLERK','辦事員','SALESMAN','銷售員','MANAGER','經理','---') from emp;