Oracle数据库----函数
--大小寫控制函數
--upper
select * from emp where job = upper('salesman');
--lower
select * from emp where lower(job) = 'clerk';
--initcap
select empno, initcap(ename) from emp;
--upper、lower、initcap這三個函數的共同點,如果輸入參數值為null時,則返回null
select empno, initcap(null) from emp;
--字符控制函數
--字符串連接符,實現雇員名與工資兩列的連接
select ename || ':' || sal from emp;
--字符串連接的函數concat,實現雇員名與工資兩列的連接
select concat(concat(ename,':'),sal) from emp;
--截串函數 substr
select * from emp where substr(job,1,4) = 'SALE';
--求字符串長度的函數 length
select * from emp where length(ename) = 6;
--instr 求子串在字符串中的位置
select instr('hello oracle','oracle') from dual;
select instr('hello oracle hello oracle', 'oracle', 1, 2) from dual;
--左填充函數 lpad
select lpad(job,9,'*') from emp;
--右填充函數 rpad
select rpad(job, 9, '*') from emp;
--替換函數 replace
select replace('hello oracle','oracle','world') from dual;
--四舍五入的函數 round
--求員工的日工資
select round(sal/30,2) from emp;
--截斷函數 trunc
select round(sal/30,2),trunc(sal/30,2) from emp;
--求余數的函數 Mod
--求員工號為偶數的員工信息
select * from emp where mod(empno,2)=0;
--sysdate
select sysdate-1 昨天 , sysdate 今天, sysdate+1 明天 from dual;
--months_between
select round(months_between(sysdate,hiredate)/12)from emp;
--add_months
select ename,add_months(hiredate,30*12) from emp;
--next_day
select next_day(sysdate,'星期一')from dual;
--last_day
select sysdate,last_day(sysdate) from dual;
select empno,ename,last_day(hiredate) from emp;
--round
select hiredate, round(hiredate,'YEAR'), round(hiredate,'MONTH') from emp where empno=7654;
--trunc
select hiredate, trunc(hiredate,'YEAR'), trunc(hiredate,'MONTH') from emp where empno=7654;
--隱式數據類型轉換的舉例
select * from emp where sal>'2000';
select * from emp where hiredate='02-4月-81';
--to_char 日期類型轉換成字符類型
select to_char(hiredate,'YYYY-MM-DD') from emp;
select to_char(hiredate,'YYYY"年"MM"月"DD"日"') from emp;
select to_char(hiredate,'DD-MON-RR','NLS_DATE_LANGUAGE=AMERICAN') from emp;
--to_char 數值類型轉換成字符類型
select sal,to_char(sal,'L0,000,000.00')from emp;
select sal,to_char(sal,'L9,999,999.99')from emp;
select sal,to_char(sal,'$9,999,999.99')from emp;
--to_date 字符類型轉換成日期類型
select ename,hiredate from emp where hiredate>to_date('1981-12-31','YYYY-MM-DD');
--to_number 字符類型轉換成數值類型
select ename,sal from emp where sal>to_number('¥2000','L99999');
--nvl
select ename,sal,comm,sal+nvl(comm,0) from emp;
--nvl2
select ename,sal,comm,nvl2(comm,comm+sal,sal) from emp;
--nullif
select empno,ename,hiredate,nullif(hiredate,trunc(sysdate,'MONTH'))from emp;
--coalesce
select ename,sal,comm,coalesce(sal+comm,sal) from emp;
--想顯示全部雇員的職位,但是這些職位要求替換為中文顯示:
--
--CLERK:辦事員;
--SALESMAN:銷售;
--MANAGER:經理;
--ANALYST:分析員;
--PRESIDENT:總裁;
--case表達式
select empno,ename,
case job
when 'CLERK' then '辦事員'
when 'SALESMAN' then '銷售'
when 'MANAGER' then '經理'
when 'ANALYST' then '分析員'
else '總裁'
end
from emp;
--decode函數
select empno,ename,job,decode(job,'CLERK','辦事員','SALESMAN','銷售','MANAGER','經理','ANALYST','分析員','總裁')from emp;
--case表達式,區間值的判斷
select empno,ename,sal,
case when sal<2000 then '低'
when sal<5000 then '中'
else '高'
end
from emp;
--參照雇員信息表,想顯示距聘用日期3個月后的下一個星期一的日期,且日期格式如:2017-01-06。
select empno,ename,to_char(next_day(add_months(hiredate,3),'星期一'),'YYYY-MM-DD') new_date
from emp;
--參照雇員信息表,顯示雇員日薪并四舍五入到2 位小數的結果,然后對薪資格式以‘¥ 1,182.19’這樣的例子形式進行格式化
select empno,ename,sal,to_char(round(sal/30,2),'L9,999.99')
from emp;
--求平均值avg
select avg(sal) from emp;
--求和sum
select sum(sal) from emp;
--求最大值max
select max(sal) from emp;
--求最小值min
select min(sal) from emp;
--計數函數count
select count(*) from emp;
select count(empno) from emp;
--統計一下部門的個數
select count(deptno) from emp;
--在分組函數中通過distinct關鍵字來去除重復的記錄
select count(distinct deptno) from emp;
--行轉列wm_concat
select wm_concat(ename) from emp;
--求員工的平均工資
select sum(sal)/count(*) 方法一, sum(sal)/count(sal) 方法二, avg(sal) 方法三 from emp;
--求員工的平均補助
select sum(comm)/count(*) 方法一, sum(comm)/count(comm) 方法二, avg(comm) 方法三 from emp;
select count(*),count(nvl(comm,0)) from emp;
select comm from emp;
--不忽略空值
select avg(nvl(comm,0)) from emp;
--忽略空值
select avg(comm) from emp;
--求出每個部門的平均工資,要求顯示:部門號,部門的平均工資
select deptno,avg(sal) from emp group by deptno;
--多列分組
--按不同的部門,不同的職位,計算員工的平均工資
select deptno,job,avg(sal) from emp group by deptno,job order by deptno;
--求出每個部門的平均工資,要求顯示:每個部門的平均工資。
select avg(sal)from emp group by deptno;
--求出每個部門的員工姓名,要求顯示:部門編號、員工姓名
select deptno,wm_concat(ename)from emp group by deptno;
--求平均工資大于2500的部門,要求顯示:部門號,平均工資
--select deptno,avg(sal) from emp where avg(sal)>2500 group by deptno;
--如果條件中包含分組函數,需要通過having子句對分組結果進行過濾
select deptno,avg(sal) from emp group by deptno having avg(sal)>2500;
--在條件中如果沒有分組函數,推薦使用where子句,可以先過濾后分組來提高效率
select deptno,avg(sal) from emp where deptno=10 group by deptno;
--求部門平均工資的最大值
--嵌套分組函數要與group by子句一起使用
select max(avg(sal)) from emp group by deptno;
?
轉載于:https://www.cnblogs.com/xiaomifeng1010/p/11111207.html
總結
以上是生活随笔為你收集整理的Oracle数据库----函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 01 Python基础学习
- 下一篇: oracle审计的格式