Oracle函数

                                         函数
Oracle的函数分单行函数与多行函数
    单行函数:只影响一行数据
    多行函数:影响多行数据

字符函数
  大小写转换:
 LOWER
 UPPER
 INITCAP
  字符处理函数:
 CONCAT
 SUBSTR
 LENGTH
 INSTR
 LPAD | RPAD
 TRIM
 REPLACE
select empno,lower(ename) from emp;
select empno,upper(ename) from emp;
select empno,initcap(ename) from emp;
select empno||ename from emp;
select concat(empno,ename) from emp;
select concat(empno,'aa') from emp;
select ename,substr(ename,1,3) from emp(1代表从第几个字母开始,3代表截取的长度)
select ename,length(ename) from emp;(返回字符串的长度)
select ename,instr('string',r) from emp;(这个字符串中的r第一次出现的位置,位置从一开始,java中从0开始)
select empno,lpad(empno,10,'*') from emp;(定义字符长度10位,不足的地方补上*号,rpad是又面补)
select ename,trim(ename) from emp;(去掉字符串中的空格)
select ename,length(trim(ename)) from emp;(去掉字符串中的空格,得到字符串的真正长度ltrim只去左边的,rtrim只去右边的,注意中间的空格去不掉)
select replace(ename,'A','a') from emp;(把大写A替换成小写a)

数字函数
  ROUND
  TRUNC
  MOD
select sal,rround(sal,2) from emp;(四舍五入到指定位2代表保留几位)
select sal,round(sal) from emp;
select sal,trunc(sal,2) from emp;(小数点后截位2代表截的位数)
select sal,mod(sal,100) from emp;(取余数计算,100代表对多少取余数)
转换函数(字符串,数字,日期转换)
  数字类型转换
    隐含的数字类型转换
    显式的数字类型转换(建议尽量使用)
 to_char
 to_number
 
 to_date
 to_char
日期类型转成字符格式
select sysdate from dual;
select to_char(sysdate,'yyyy-mm-dd-dd HH:Mi:ss') from dual;
select to_char(sysdate,'fmyyyy-MM-dd') from dual;
select to_char(sysdate,'yyyy-MM-dd')+1 from dual;
select to_char(sysdate,'year month dy day') from dual;
to_char(sysdate,'dy') from dual;(dy表示3个字母缩写)
日期格式基础:
时间格式作为日期的一部分
HH24:MI:SS:AM     15:45:32 PM
用双引号括起来以加字符串
DD"of"MONTH       12 of OCTOBER
数值拼写
ddspth            fourteenth
数值转换
9  代表一个数字
0  强制为0
$  设置美元符号
L  使用当前字符集货币符号
.   小数点
,千位分隔符
select to_char(sal,'999,999,999,999,999') from emp;
select to_char(sal,'000,000,000,000') from emp;
select to_char($sal,999,999,999) from emp;
seelct to_char(Lsal,999,999,999) from emp;
select sal,to_number(to_char(sal,'999999.999')) from emp;
select to_date('2008-01-01','yyyy-MM-dd')+10 from dual;
日期类函数
  MONTHS_BETWEEN 两日期相差多少月
  ADD_MONTHS 加月份到日期
  NEXT_DAY 指定日期的下一天
  LAST_DAY 一个月中的最后一天
  ROUND Round日期
  TRUNC Truncate日期
select empno,hiredate,sysdat-hiredate from emp;()
select empno,hiredate,months_between(sysdate,hiredate)
  from emp;()
select add_months(sysdate,2) from dual;(加两个月)
select add_months(sysdate,-2) from dual;(减两个月)
select next_day(sysdate,2) from dual;(2代表)
select last_day(sysdate) from dual;()
select round(sysdate) from dual;(日期的四舍五入)
select trunc(sysdate) from dual;()
select trunc(sysdate,'01-1月-98') from dual;
select round(sysdate,'MONTH') from dual;
select trunc(sysdate,'year') from dual;

其他函数
将空值转换为实际值
NVL
NVL2
select empno,ename,job,sal,comm,nvl(comm,0) from emp;
select empno,ename,job,sal,comm,nvl2(comm,'sal+comm','sal')
  from employees where department_id in(50,80);
NULLIF
COALESCE 返回一个非空的表达式
CASE
select empno,ename,sal,case
  when sal<1000 then '小于1000'
  when sal>=1000 and sal<2000 then '介于1000到2000之间'
  when sal>=2000 and sal,3000 then '介于2000到3000之间'
  else '大于3000'
end
  from emp;
DECODE 类似于case或if(相等的情况)
select empno,ename,sal,decode(sal,1000,'大于1000') from emp;
select empno,ename,deptno,decode(deptno,20,'技术部',30,'财务  部',10,'办公室') from emp;
函数嵌套
select empno,rpad(lpad(empno,6,'GB'),9,'_01') from emp;
分组函数
AVG 平均值
COUNT 统计表里的记录
MAX 最大值
MIN 最小值
SUM 总和
select max(sal),min(sal),avg(sal),sum(sal) from emp;
select max(sal),min(sal),avg(sal),sum(sal) from emp
  where deptno=10;
select count(*) from emp;
seelct count(empno) from emp;
count排除空值,在进行sum运算时,将空值去掉
insert into test(select * from test);(把表的数据插入另个表)
select avg(sal) from emp;
select avg(nvl(sal,0)) from emp;
GROUP BY子句
select deptno,max(sal),min(sal),sum(sal),avg(sal)
  from emp group by deptno
    order by deptno desc;
select emptno,ename,job,deptno from emp
  group by job,empno,ename,deptno;
select deptno,avg(sal) from emp
  group by deptno
  having avg(sal)>2000;
select deptno,avg(sal) from emp
  group by deptno
  having avg(sal);
select deptno,avg(sal) from emp
  group by deptno
  having avg(sal)>(select avg(sal) from emp);
select name
case subject
  when '数学' then score else 0 end 数学,
case subject
  when '语文' then score else 0 end 语文,
case subject
  when '英语' then score else 0 end 英语
from stu
  group by name,subject,score;
 
select name 姓名,
sum(case subject
  when '数学' then score else 0 end) 数学,
sum(case subject
  when '语文' then score else 0 end) 语文,
sum(case subject
  when '英语' then score else 0 end) 英语
end)
from stu
  group by name;
HAVING子句: 限定组的结果
嵌套组函数
select max(avg(salary)) from employees
  group by departement_id;(组函数最多嵌套两层)

你可能感兴趣的:(oracle,函数,单行函数,休闲,多行函数)