Oracle函数解析

 
日期函数

  add_months

增加或减去月份
eg:select to_char(add_months(to_date('2009-3','yyyy-mm'),2),'yyyy-mm') from dual;

日期型数据直接加减day;
eg1:select to_char(sysdate,'yyyy.mm.dd'),to_char((sysdate)+1,'yyyy.mm.dd') from dual;
 
LAST_DAY 返回日期的最后一天
eg2:select last_day(sysdate) from dual;
 
 
MONTHS_BETWEEN(date2,date1) 给出date2-date1的月份
eg1:select months_between('19-12月-2008','19-3月-2009') mon_between from dual;
 
eg2:select months_between(to_date('2000.05.20','yyyy.mm.dd'),to_date('2005.05.20','yyyy.mm.dd')) mon_betw from dual;
 
TRUNC 截取日期
select trunc(sysdate,'month') from dual;
 
ROUND 四舍五入
select round(to_date('17-3月-2009'),'month') from dual;
 
extract() 找出日期或间隔值的字段值 
select extract(month from sysdate) "This Month" from dual; 
select extract(year from add_months(sysdate,36)) "3 Years Out" from dual;
 
next_day(d,day) 日期d之后的第一周中,指定的那天(指定星期的第几天)是什么日期 
select next_day(sysdate,1) value from dual;
 
转换函数:
隐式转换-------add_months('13-3月-2009',2)即为add_months(to_date('13-3月-2009'),2)
显示转换-------建议使用显示的数据类型转换,确保SQL的可靠性和可读性
 
to_date (char,'format_model')   eg:  to_date('2009-3-13','yyyy-mm-dd')     or   to_date('2009-3月-13','yyyy-mon-dd')
 SELECT TO_DATE(2454336,'J') from dual;  注意 'J'则表示按照公元制(Julian day)转换,c则必须为大于0并小于5373484的正整数。
 
to_char (date,'format_model')    eg:    to_char(sysdate,'yyyy-mm-dd day hh24:mi:ss am')     
sql server: cast(int as varchar(20))     convert(varchar(20),number)
select  to_char(sal,'L999,999.999') from scott.emp;前去0
select  to_char(sal,'L000,000.000') from scott.emp;不去0
 
to_number (char,'format_model')   eg:  to_number('$1,600,00','$99,999,99')
 
 
分组函数:
avg、min、max、sum、count
count(*)--------返回组中总记录数目
count(exp)------返回exp值非空的记录数目
count(distinct exp)--------返回exp不重复的非空的记录数
distinct ename,dept
 
通用函数:
1、nvl(exp1,exp2)说明:如果表达式exp1的值为null,则返回exp2的值,否则返回exp1的值。
eg: select empno,sal+nvl(comm,0) from emp;
      select empno,nvl(job,'no job yet') from emp;
 
2、nvl2(exp1,exp2,exp3)说明:如果exp1的值不为null,则返回exp2的值,否则返回exp3的值。
eg:select empno,sal,comm,nvl2(comm,sal+comm,sal) total from emp;
 
3、nullif(exp1,exp2)说明:如果exp1与exp2的值相等,则返回null,否则返回exp1的值
 
4、coalesce (exp1,exp2)说明:依次考察各参数表达式,遇到非null值即停止,并返回该值。
eg:select empno,ename,sal,comm,coalesce(sal+comm,sal,0) from emp;
 
 
group by字句
说明:
1、出现在select列表中的字段,如果不是包含在分组函数中,那么该字段必须同时在group by子句中出现
2、包含在group by子句中的字段必须出现在select列表中
3、可使用where子句限定查询条件
4、可使用order by子句指定排序方式  asc /desc
5、可使用having子句对分组的结果再次过滤
eg: select ename,deptno,sum(sal) from emp where sal>1600 group by deptno,ename having deptno=20 order by sum(sal) desc;
 
分析函数: 报表统计
ROW_NUMBER 返回连续的排位,不论值是否相等  
row_number() over()用法
RANK 具有相等值的行排位相同,序数随后跳跃   rank() over()
DENSE_RANK 具有相等值的行排位相同,序号是连续的 dense_rank() over()  
eg1:  select ename,job deptno,sal,row_number() over(order by sal desc) as sal_rank from scott.emp;
 
eg2:select deptno,ename,sal,comm,rank() over(partition by deptno order by sal desc,comm) rank from emp;
 
eg3:
SELECT d.dname, e.ename, e.sal, DENSE_RANK() OVER (PARTITION BY e.deptno ORDER BY e.sal DESC)
  AS DENRANK   FROM emp e, dept d WHERE e.deptno = d.deptno;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值