2、数字函数
--ROUND 四舍五入 --TRUNC 截断 --MOD 求余 select round(25.533,2) from dual; select trunc(25.323,2) from dual; select mod(8, 3) from dual;
3、日期
oracle中日期型数据实际含有两个值:日期和时间。
默认格式为:DD-MON-RR
--返回系统时间 select sysdate from dual; --两个日期相减,返回日期之间相差的天数 select ename,(sysdate-hiredate) / 7 "weeks" from emp; --MONTHS_BETWEEN 两日期相差月数 --ADD_MONTHS 指定日期加上若干月数 --NEXT_DAY 指定日期的下一个日期 --LAST_DAY 本月的最后一天 --ROUND 日期四舍五入 --TRUNC 日期截断 select months_between(sysdate,hiredate) from emp;
4、显式数据类型转换
--TO_CHAR(date, 'format_model') --把日期转换成字符串 select to_char(sysdate, 'YYYY MM DD HH:MI:SS') from dual; --TO_CHAR(number, 'format_model') select ename,sal,to_char(sal, '$99,999.00') from emp; --TO_NUMBER(char[,'format_model']) --TO_DATE(char[,'format_model'])
通用函数,适用于任何数据类型,也适用于空值
NVL(expr1,expr2) NVL2(expr1,expr2,expr3) NULLIF(expr1,expr2) COALESCE(expr1,expr2,...)
5、条件表达式
在sql语句中使用if-then-else逻辑
case表达式,sql99语法,类似basic,比较繁锁
decode函数,oracle自已语法,类似java,比较简洁
CASE expr WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_expr3 THEN return_expr3
ELSE else_expr]
END
DECODE(col|expression, search1, result1
[,search2, result2, ..., ]
[,defautl]
)
select ename,sal,decode(round(sal/1000), 1, '一倍', 2, '二倍', 3, '三倍', '不知倍数' ) from emp;
6、函数嵌套
单行函数可以嵌套,嵌套函数的执行是由内到外。
四、分组函数
分组函数作用于一组数据,并对一组数据返回一个值。
常用组函数
--AVG --COUNT --MAX --MIN --SUM select sum(sal) as "total" from emp; select max(sal) from emp; select count(*) from emp where deptno=10; select count(distinct deptno) from emp;
分组数据
通过GROUP BY可以将数据分成若干组
select deptno,avg(sal) from emp group by deptno;
(*注意:在select列表中所有未包含在组函数中的列都必须包含在group by中。)
--多列分组 select deptno,job,avg(sal) from emp group by deptno,job;
过滤分组
通过HAVING子句对分组进行过滤
select deptno,avg(sal) from emp group by deptno having deptno in(10,20);
(*注意:不能在where子句中使用组函数,having子句中可以。)










