DB2 常用函数实例总结

--查询某个用户下所有的表名及创建时间
select creator,name,ctime from sysibm.systables where type='T' and creator='DB2ADMIN';
--查询某个用户下某张表中的字段名,类型,长度
SELECT tabschema,tabname,colname,typename,length FROM SYSCAT.COLUMNS WHERE TABNAME='EMP' AND TABSCHEMA='DB2ADMIN';


--查询当前时间
select current date from sysibm.sysdummy1;
--分页查询
select * from emp order by empno limit 0,3;
--左/右边不足5位补0
select lpad('123',5,0) from sysibm.sysdummy1;
select rpad('123',5,0) from sysibm.sysdummy1;
--TRUNC()/TRUNCATE()与ROUND()函数
SELECT TRUNCATE(345.6789,2) FROM sysibm.sysdummy1; --346.6700
SELECT TRUNC(345.6789,2) FROM sysibm.sysdummy1; --346.6700
SELECT TRUNC(345.6789) FROM sysibm.sysdummy1; --345.0000

SELECT ROUND(345.6789,2) FROM sysibm.sysdummy1; --346.6800
SELECT ROUND(345.6789) FROM sysibm.sysdummy1; --346.0000


--查询重复数据
select * from ( select empno,row_number() over(order by empno) rn from emp) e1 where empno in (
	   select empno from ( select empno,row_number() over(order by empno) rn from emp) e2
	   where e1.rn > e2.rn
	   and e1.empno = e2.empno
);

select * from ( select empno,row_number() over(order by empno) rn from emp) e1 where exists (
	   select empno from ( select empno,row_number() over(order by empno) rn from emp) e2 
	   where e1.rn > e2.rn
	   and e1.empno = e2.empno
);

select * from ( select empno,row_number() over(partition by empno order by empno) rn from emp ) where rn>1
--删除重复的数据
delete from ( select empno,row_number() over(partition by empno order by empno) rn from emp ) where rn>1

--列转行 行转列
--stu_score
--cla_no  stu_no  score
--   1   20160001   70
--   2   20160001   80
--   1   20160002   90
--   2   20160002   85
--转
--cla_no stu_score_20160001 stu_score_20160002
--   1            70                 90
--   2            80                 85

SELECT S.cla_no, Q.stu_no, Q.score
FROM (
	 --列转行
	 SELECT cla_no,
	   		max(case when stu_no = 20160001 then score end ) as stu_score_20160001,
	   		max(case when stu_no = 20160002 then score end ) as stu_score_20160002
	 FROM stu_score
	 GROUP BY cla_no
	  ) AS S,
     TABLE (VALUES(20160001, S.stu_score_20160001),
                  (20160002, S.stu_score_20160002))
            AS Q(stu_no, score);

--查询各个领域前多少名(各个部门工资排名最高的两个的职员姓名)
select deptno,ename,sal
from emp
where (
	select count(1)
	from emp e
	where e.deptno = emp.deptno
		and e.empno != emp.empno
		and e.sal > emp.sal
    ) < 2
order by deptno,sal desc;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值