关闭

Oracle 常用的函数

73人阅读 评论(0) 收藏 举报
/*常用的伪列有ROWID和ROWNUM*/

select rowid, orders.* from orders;

--orders表的结果

create table ORDERS
(
  c1  NUMBER(5) not null,
  c10 NUMBER(20) not null,
  c20 VARCHAR2(20) not null
)
--orders表的数据
insert into ORDERS (c1, c10, c20)
values (1, 2, 'sa');
insert into ORDERS (c1, c10, c20)
values (1, 2, 'sa');
insert into ORDERS (c1, c10, c20)
values (1, 2, 'sa');
insert into ORDERS (c1, c10, c20)
values (1, 2, 'sa');
insert into ORDERS (c1, c10, c20)
values (2, 3, 'oop');
insert into ORDERS (c1, c10, c20)
values (1, 2, 'sa');
insert into ORDERS (c1, c10, c20)
values (1, 2, 'sa');
insert into ORDERS (c1, c10, c20)
values (1, 2, 'sa');
insert into ORDERS (c1, c10, c20)
values (2, 3, 'oop');
insert into ORDERS (c1, c10, c20)
values (2, 3, 'oop');
insert into ORDERS (c1, c10, c20)
values (2, 3, 'oop');
insert into ORDERS (c1, c10, c20)
values (2, 3, 'oop');
insert into ORDERS (c1, c10, c20)
values (1, 2, 'sa');
commit;


--1)重复查询数据
  select *from orders group by c1,c10,c20
  
  select distinct * from orders;

  select * from orders o where rowid=
  (select max(rowid) from orders oo where oo.c1=o.c1 and oo.c10=o.c10 and oo.c20=o.c20)
  
   select * from orders o where rowid in
  (select max(rowid) from orders group by c1,c10,c20)
  
  --2)删除重复的数据
  select rowid, orders.* from orders;
  
  delete from orders 
  where rowid not in
  (select max(rowid) from orders group by c1,c10,c20)
  

/*  集合操作符
UNION(联合)
UNION ALL(联合所有)
INTERSECT(交集)
MINUS(减集)*/
如果选择列表中包含有表达式或者函数,那么必须为表达式或函数定义列别名


--1、Uinon:无重并集,并以第一列的结果进行升序排序
select *from emp where deptno=10
union 
select * from emp where sal>500




--2、Uinon all:有重并集,不对结果集排序
select *from emp where deptno=10
union all
select * from emp where sal>500


--3、Intersect:交集,只返回两个查询共同返回的行


select *from emp where deptno=10
intersect 
select * from emp where sal>500


--4、Minus:差集,采用第一个查询返回的行,减去第二个查询中也同样返回的行,最后返回剩下的行
select * from emp where sal>500  --15 
minus 
select *from emp where deptno=10  --3




/*连接操作符*/
select 'aaa'||1001 from dual



--(一)转换函数将值从一种数据类型转换为另一种数据类型
--常用的转换函数
--TO_CHAR (X[[c2],c3])【功能】将日期或数据转换为char数据类型
/*x是一个date或number数据类型。
c2为格式参数
c3为NLS设置参数*/
select to_char(1210.73, '9999.999') from dual;
select to_char(1210.73, '$9,999.00') from dual;
select to_char(sysdate,'yyyy-MM-dd'),to_char(sysdate,'DL'),to_char(sysdate,'DS')from dual;


--TO_DATE(X[,c2[,c3]])【功能】将字符串X转化为日期型
select to_date('201607','yyyymm'),to_date('2008-12-31 12:31:30','yyyy-mm-dd hh24:mi:ss')
 from dual;




--TO_NUMBER(X[[,c2],c3])【功能】将字符串X转化为数字型
select TO_NUMBER('199912')+10,TO_NUMBER('450.05') from dual;


--查询雇佣日期》1981 的员工信息
select * from emp;


--oracle有默认的日期格式(日-月-年)
select * from emp where hiredate>'20-12月-1981'


--to_char
select * from emp where to_char(hiredate,'DS')>'1982-01-23'


--员工编号与姓名连在一起
select empno||'_'||ename,sal+comm from emp;




/*转换空值的函数
NVL 
NVL2
DECODE*/


/*【语法】NVL (expr1, expr2)
【功能】若expr1为NULL,返回expr2;expr1不为NULL,返回expr1。*/
select nvl('','xx'),nvl('aa','xx') from dual;


 select * from orders 
 
 select c20,nvl(c20,'empty') from orders;
 


/*【语法】NVL2 (expr1, expr2, expr3) 
【功能】expr1不为NULL,返回expr2;expr2为NULL,返回expr3。
expr2和expr3类型不同的话,expr3会转换为expr2的类型 */
  select nvl2('','xx','John'),nvl2('aa','xx','John') from dual;


  select c20,nvl2(c20,c20,'NULL') from orders;


/*decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
【功能】根据条件返回相应值
【参数】c1, c2, ...,cn,字符型/数值型/日期型,必须类型相同或null
注:值1……n 不能为条件表达式,这种情况只能用case when then end解决*/
select c20,decode(c20,'oop','OOP','sa','SA','aa','AA','EMPTY') from orders;


select emp.* ,decode(deptno,'10','财务部','20','公关部','30','销售部') from emp;











0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:62052次
    • 积分:3679
    • 等级:
    • 排名:第9145名
    • 原创:309篇
    • 转载:65篇
    • 译文:0篇
    • 评论:4条
    文章分类
    最新评论