qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          Oracle單行函數(shù)和多行函數(shù)實(shí)例

            單行函數(shù)和多行函數(shù)示意圖:

            單行函數(shù)分為五種類型:字符函數(shù)、數(shù)值函數(shù)、日期函數(shù)、轉(zhuǎn)換函數(shù)、通用函數(shù)

            單行函數(shù):

          --大小寫控制函數(shù)
          select lower('Hello World') 轉(zhuǎn)小寫, upper('Hello World') 轉(zhuǎn)大寫 from dual;
          --initcap: 首字母大寫
          select initcap('hello world') 首字符大寫 from dual;

          --字符控制函數(shù)
          -- concat: 字符連接函數(shù), 等同于  ||
          select concat('Hello',' World') from dual;
          --substr:求母串中的某個子串
          select substr('Hello World',3) from dual;
          select substr('Hello World',3,4) from dual;
          --length和lengthb: 字符數(shù)和字節(jié)數(shù)
          select length('China') 字符數(shù), lengthb('China') 字節(jié)數(shù)  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:字符串替換函數(shù)
          select replace('Hello Wordl','l','*') from dual;

          --數(shù)字函數(shù)
          select round(45.926,2) 四舍五入, trunc(45.926,2)  截斷 ,mod(1600,300) 求于 from dual;
          --ROUND函數(shù)
          select round(45.923,0) 整數(shù)位, round(45.923,-1) 十位,round(45.923,-2) 百位 from dual;

          --日期函數(shù)
          --顯示當(dāng)前日期
          select sysdate from dual;
          --顯示時間部分
          select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
          --顯示昨天,今天和明天,加減數(shù)字仍未日期
          select sysdate-1 昨天, sysdate 今天, sysdate+1 明天 from dual;
          --兩個日期相減,結(jié)果為相差的天數(shù),查詢員工信息,顯示員工工齡。兩個日期不能相加
          select empno,ename, sysdate-hiredate 天 from emp;
          --查詢員工信息,顯示員工工齡,分別按照天,星期,月顯示
          select empno,ename,sysdate-hiredate 天,(sysdate-hiredate)/7 星期, (sysdate-hiredate)/30 月 from emp;
          --months_between:兩個日期相差的月數(shù)
          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: 某個日期當(dāng)月的最后一天
          select last_day(sysdate) from dual;
          --next_day:下周六
          select next_day(sysdate,'星期五') from dual;
          --對日期進(jìn)行四舍五入
          select round(sysdate,'MONTH')  月,round(sysdate,'YEAR') from dual; 
          --對日期進(jìn)行截斷
          select trunc(sysdate,'MONTH')  月,trunc(sysdate,'YEAR') from dual;
          --日期格式
          select * from emp where hiredate=to_date('1982-01-23','yyyy-mm-dd');
          -- 查詢當(dāng)前日期:顯示:  2011-09-17 15:12:15今天是星期六
          select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss"今天是"day') from dual;
          --查詢員工信息,顯示員工的編號,姓名,月薪,要求有貨幣代碼(L),千位符(,),小數(shù)點(diǎn)(.),
          select empno,ename,to_char(sal,'L9,999.99') from emp;

          --通用函數(shù)
          --nvl(exp1,exp2):當(dāng)exp1為空時,返回exp2
          --nvl2(exp1,exp2,exp3):當(dāng)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 :找到參數(shù)列表中,第一個不為空的值
          select ename,comm,sal,COALESCE(comm,sal) from emp;
          --給員工漲工資,根據(jù)職位漲,總裁漲1000,經(jīng)理漲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;

            多行函數(shù)

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

            組函數(shù):

          --求員工的工資總和
          select sum(sal) from emp;
          --求個數(shù)
          select count(*) from emp;
          --求平均工資
          select sum(sal)/count(*) 方式一, avg(sal) 方式二 from emp;
          --關(guān)于空值:組函數(shù)會自動濾空
          select count(*), count(comm) from emp;
          --max和min:求最高工資和最低工資
          select max(sal) 最高工資,min(sal) 最低工資 from emp;
          --分組數(shù)據(jù):求各個部門的平均工資
          select deptno,avg(sal) from emp group by deptno;
          --group by作用于多列: 按部門,不同的工種,統(tǒng)計平均工資
          --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的增強(qiáng)
          select deptno,job,sum(sal) from emp group by rollup(deptno,job);
          --不同的deptno空兩行/取消設(shè)置
          break on deptno skip 2/break on null

          posted on 2012-04-11 09:31 順其自然EVO 閱讀(3702) 評論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫

          <2012年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 凉山| 高邮市| 内乡县| 周宁县| 扎赉特旗| 达日县| 永嘉县| 青河县| 怀安县| 尤溪县| 庆云县| 长岛县| 黄山市| 淮滨县| 莆田市| 黄梅县| 襄樊市| 宝应县| 搜索| 桂平市| 南昌市| 左云县| 会宁县| 丘北县| 徐闻县| 东莞市| 奈曼旗| 咸阳市| 双辽市| 梁河县| 启东市| 洛宁县| 汉阴县| 右玉县| 句容市| 文成县| 嵊泗县| 湖州市| 常山县| 泊头市| 西城区|