Oracle單行函數和多行函數實例

單行函數和多行函數示意圖:

 

  單行函數分爲五種類型:字符函數、數值函數、日期函數、轉換函數、通用函數

 

  單行函數:

  --大小寫控制函數

  select lower('Hello World') 轉小寫, upper('Hello World') 轉大寫 from dual;

  --initcap: 首字母大寫

  select initcap('hello world') 首字符大寫 from dual;

  --字符控制函數

  -- concat: 字符連接函數, 等同於  ||

  select concat('Hello',' World') from dual;

  --substr:求母串中的某個子串

  select substr('Hello World',3) from dual;

  select substr('Hello World',3,4) from dual;

  --length和lengthb: 字符數和字節數

  select length('China') 字符數, lengthb('China') 字節數  from dual;

  --instr:在母串中,查找子串的位置

  select instr('Hello World','ll') from dual;

  --lpad,rpad: 左右填充,將abcd用*填充到10位

  select lpad('abcd',10,'*') 左填充, rpad('abcd',10,'*') 右填充 from dual;

  --trim: 去掉字符串前後指定的字符

  select trim('H' from 'Hello WorldH') from dual;

  --replace:字符串替換函數

  select replace('Hello Wordl','l','*') from dual;

  --數字函數

  select round(45.926,2) 四捨五入, trunc(45.926,2)  截斷 ,mod(1600,300) 求於 from dual;

  --ROUND函數

  select round(45.923,0) 整數位, round(45.923,-1) 十位,round(45.923,-2) 百位 from dual;

  --日期函數

  --顯示當前日期

  select sysdate from dual;

  --顯示時間部分

  select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

  --顯示昨天,今天和明天,加減數字仍未日期

  select sysdate-1 昨天, sysdate 今天, sysdate+1 明天 from dual;

  --兩個日期相減,結果爲相差的天數,查詢員工信息,顯示員工工齡。兩個日期不能相加

  select empno,ename, sysdate-hiredate 天 from emp;

  --查詢員工信息,顯示員工工齡,分別按照天,星期,月顯示

  select empno,ename,sysdate-hiredate 天,(sysdate-hiredate)/7 星期, (sysdate-hiredate)/30 月 from emp;

  --months_between:兩個日期相差的月數

 

select (sysdate-hiredate)/30 方式一, months_between(sysdate,hiredate) 方式二 from emp;

  --add_months:在指定日期上加上若干個月

  select add_months(sysdate,1)  下個月, add_months(sysdate,123) "123個月後" from dual

  --last_day: 某個日期當月的最後一天

  select last_day(sysdate) from dual;

  --next_day:下週六

  select next_day(sysdate,'星期五') from dual;

  --對日期進行四捨五入

  select round(sysdate,'MONTH')  月,round(sysdate,'YEAR') from dual;

  --對日期進行截斷

  select trunc(sysdate,'MONTH')  月,trunc(sysdate,'YEAR') from dual;

  --日期格式

  select * from emp where hiredate=to_date('1982-01-23','yyyy-mm-dd');

  -- 查詢當前日期:顯示:  2011-09-17 15:12:15今天是星期六

  select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss"今天是"day') from dual;

  --查詢員工信息,顯示員工的編號,姓名,月薪,要求有貨幣代碼(L),千位符(,),小數點(。),

  select empno,ename,to_char(sal,'L9,999.99') from emp;

  --通用函數

  --nvl(exp1,exp2):當exp1爲空時,返回exp2

  --nvl2(exp1,exp2,exp3):當exp1爲空時,返回exp3;否則返回exp2

  select ename,sal*12+nvl2(comm,comm,0) 年收入 from emp;

  --NULLIF (expr1, expr2),如果expr1=expr2,返回null;否則,返回expr1

  select nullif('abc','abc') from dual;

  select nullif('abc','abcaa') from dual;

  --COALESCE :找到參數列表中,第一個不爲空的值

  select ename,comm,sal,COALESCE(comm,sal) from emp;

  --給員工漲工資,根據職位漲,總裁漲1000,經理漲600 其他人員漲400

  select ename,job,sal 漲前工資, case job when 'PRESIDENT' then sal+1000

  when 'MANAGER'   then sal+600

  else sal+400

  end 漲後工資

  from emp;

  select ename,job,sal 漲前工資, decode(job,'PRESIDENT',sal+1000,

  'MANAGER',sal+600,

  sal+400) 漲後工資

  from emp;

  多行函數

  和單行函數相比,oracle提供了豐富的基於組的,多行的函數。這些函數能在select或select的having子句中使用,當用於select子串時常常都和GROUP BY一起使用。多行函數分爲接收多個輸入,返回一個輸出。

  組函數:

  --求員工的工資總和

  select sum(sal) from emp;

  --求個數

  select count(*) from emp;

  --求平均工資

  select sum(sal)/count(*) 方式一, avg(sal) 方式二 from emp;

  --關於空值:組函數會自動濾空

  select count(*), count(comm) from emp;

  --max和min:求最高工資和最低工資

  select max(sal) 最高工資,min(sal) 最低工資 from emp;

  --分組數據:求各個部門的平均工資

  select deptno,avg(sal) from emp group by deptno;

  --group by作用於多列: 按部門,不同的工種,統計平均工資

  --group by作用於多列:先按照第一列分組;如果相同,再按照第二列分組

  select deptno,job,avg(sal) from emp group by deptno,job;

  --:求部門的平均工資大於2000的部門

  select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;

  --group by的增強

  select deptno,job,sum(sal) from emp group by rollup(deptno,job);

  --不同的deptno空兩行/取消設置

  break on deptno skip 2/break on null

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章