--create table test as select * from T1 where 1=2;
--复制表结构,不复制数据
--select * from test;
--create table test2 as select * from T1;
--复制整个表到test2
--select * from test2;
--insert into test select * from T1;
--将T1数据插入test表;
--一、日期函数
--sysdate为系统日期 dual为虚表
/*
1.add_months[返回日期加(减)指定月份后(前)的日期]
select sysdate S1,add_months(sysdate,10)S2,
add_months(sysdate,-5)S3 from dual;
*/
--2.last_day [返回该月最后一天的日期]
--select last_day(sysdate) from dual;
--3.months_between[返回日期之间的月份数]
/*
select sysdate S1, months_between('1-4月-04',sysdate) S2,
months_between('1-4月-04','1-2月-04') S3 from dual;
*/
--4.next_day(d,day): 返回下个星期的日期,day为1-7或星期日-星期六,1表示星期日
/*
select sysdate S1,next_day(sysdate,1)S2,
next_day(sysdate,'星期五')S3 from dual;
*/
--5.,round舍入到最接近的日期
/*
select sysdate S1,round(sysdate)S2,round(sysdate,'year')year,
round(sysdate,'month')month,round(sysdate,'day')day from dual;
*/
--6.trunc[截断到最接近的日期]
/*
select sysdate S1,trunc(sysdate)S2,trunc(sysdate,'year')year,
trunc(sysdate,'month')month,trunc(sysdate,'day')day from dual;
*/
--7.返回日期列表中最晚日期
--select greatest('01-1月-04','04-1月-04','10-2月-04')from dual;
--二、字符函数
--1.字符串截取
--select substr('abcdef',1,3)from dual;
--2.查找子串位置
--select instr('avcsab','ab')from dual;
--3.字符串连接
--select 'hi'||'hello world' from dual;
--4.去掉字符串中的空格,
--ltrim取消前面字符,rtrim去掉后字符,trim去掉前后字符
--select ltrim(' abc')s1,rtrim('we ')s2,trim(' abc ')s3 from dual;
--5.去掉前导和后缀
--leading去掉前导,trail去掉后缀
/*
select trim(leading from 99987678999)s1,
trim(trailing 9 from 999876999)s2,
trim(8 from 8998767999)s3 from dual;
*/
--6.返回字符串首字母的Ascii值
--select ascii('a')from dual;
--7.返回ascii值对应的字母
--select chr(98)from dual;
--8.initcap(首字母变大写),lower(变小写),upper(变大写)
/*
select lower('ABC')s1,
upper('abc')s2,initcap('abac')s3 from dual;
*/
--9.Replace
/*用第三个表达式替换第一个字符串表达式中出现的
所有第二个给定字符串表达式。
select replace('abcab','ab','333') from dual;
*/
--10.translate
/*返回将(所有出现的)
第二个字符中的每个字符替换为第三个字符中的相应字符以后的string。
select translate('abc','bc','xx') from dual;
*/
--11.lpad [左添充] rpad 右填充
/*
select lpad('func',4,'=')s1,rpad('func',9,'-')s2 from dual;
select lpad('dname',14,'=')s3 from dual;
*/
--12.decode[实现if ..then 逻辑]
--select deptno,decode(deptno,10,'1',20,'2',30,'3','其他') from dual;
--三、数字函数
--1.取整函数(ceil 向上取整,floor 向下取整)
--select ceil(66.23) N1,floor(66.56) N2 from dual;
--2.取幂(power) 和 求平方根(sqrt)
--select power(4,2) N1,sqrt(9) N2 from dual;
--3.求余
--select mod(9,7) from dual;
--4.返回固定小数位数 (round:四舍五入,trunc:直接截断)
--select round(666.667,2)N1,trunc(666.667,2)N2 from dual;
--5.sign返回值的符号(正数返回为1,负数为-1)
--select sign(-32),sign(23) from dual;
--四、转换函数
--1.to_char()[将日期和数字类型转换成字符类型]
/*
select to_char(sysdate) s1,
to_char(sysdate,'yyyy-mm-dd')s2,
to_char(sysdate,'yyyy')s3,
to_char(sysdate,'yyyy-mm-dd hh12:mi:ss')s4,
to_char(sysdate,'hh24:mi:ss')s5,
to_char(sysdate,'day')s6 from dual;
*/
--2. to_date()[将字符类型转换为日期类型]
/*
insert into emp(empno,hiredate)
values(8000,to_date('2004-10-10','yyyy-mm-dd'));
*/
--3.to_number() 转换为数字类型
--select to_number(to_char(sysdate,'hh24')) from dual;
--五、其他函数
--1.user返回当前登录名称
--select user from dual;
--2.vsize;返回表达式所需的字节数
--select vsize('hello')from dual;
--3.nvl(ex1,ex2):
--ex1值为空则返回ex2,否则返回该值本身ex1(常用)
/*
例:如果雇员没有佣金,将显示0,否则显示佣金
select comm,nvl(comm,0) from emp;
*/
--4.nullif(ex1,ex2): 值相等返空,否则返回第一个值
/*
例:如果工资和佣金相等,则显示空,否则显示工资
select nullif(sal,comm),sal,comm from emp;
*/
--5.coalesce:返回列表中第一个非空表达式
/*
select comm,sal,coalesce(comm,sal,sal*10) from emp;
*/
--6.nvl2(ex1,ex2,ex3) 如果ex1不为空,显示ex2,否则显示ex3
/*
如:查看有佣金的雇员姓名以及他们的佣金
select nvl2(comm,ename,') as HaveCommName,comm from emp;
*/
--六、分组函数
--max min avg count sum
--1.整个结果集是一个组
/*
1) 求部门30 的最高工资,最低工资,平均工资,总人数,有工作的人数,
工种数量及工资总和
select max(ename),max(sal),
min(ename),min(sal),
avg(sal),
count(*) ,count(job),count(distinct(job)) ,
sum(sal) from emp where deptno=30;
*/
--2.带group by 和 having 的分组
/*
1)按部门分组求最高工资,最低工资,总人数,有工作的人数,
工种数量及工资总和
select deptno, max(ename),max(sal),
min(ename),min(sal),
avg(sal),
count(*) ,count(job),count(distinct(job)) ,
sum(sal) from emp group by deptno;
*/
/*
2)部门30的最高工资,最低工资,总人数,有工作的人数,
工种数量及工资总和
select deptno, max(ename),max(sal),
min(ename),min(sal),
avg(sal),
count(*) ,count(job),count(distinct(job)) ,
sum(sal) from emp group by deptno having deptno=30;
*/
--3.tddev 返回一组值的标准偏差,variance 返回一组值的方差差
/*
select deptno,stddev(sal) from emp group by deptno;
select deptno,variance(sal) from emp group by deptno;
*/
--4.带有rollup和cube操作符的Group By
/*
rollup 按分组的第一个列进行统计和最后的小计
cube 按分组的所有列的进行统计和最后的小计
select deptno,job ,sum(sal) from emp group by deptno,job;
select deptno,job ,sum(sal) from emp group by rollup(deptno,job);
cube 产生组内所有列的统计和最后的小计
select deptno,job ,sum(sal) from emp group by cube(deptno,job);
*/