select upper('hello') from dual;
select * from emp where ename=upper('&str');
select replace(ename,'A','_') from emp;
select ename,substr(ename,3) from emp;
0和1都表示从第一个开始
select ename,substr(ename,0,3) from emp;
select ename,substr(ename,1,3) from emp;
通过长度-2 确定开始点
select ename,substr(ename,length(ename)-2) from emp;
select ename,substr(ename,-3) from emp;
select round(903.535),round(-903.535),round(903.535,-1),round(903.535,2) from
dual;
select trunc(903.53567),trunc(-903.53567),trunc(903.53567,-1),trunc(903.53567,2) from dual;
select mod(10,3) from dual;
select mod(3,10) from dual;
注意:在所有开发之中,如果是日期的操作,建议使用以上的函数,可以避免闰年的问题
取得今天的日期,可以使用‘’SYSDATE”
select sysdate from dual;
select ename,hiredate,sysdate-hiredate from emp;
求出本月的最后一天日期
select last_day(sysdate) from dual;
下一个周六是几号
select next_day(sysdate,'sat') from dual;
下一个周日是几号
select next_day(sysdate,'sun') from dual;
四个月后是几号
select add_months(sysdate,4) from dual;
求出每个雇员到今天为止的雇佣月份
select ename,hiredate,trunc(months_between(sysdate,hiredate)) from emp;
格式:年(yyyy),月(mm),日(dd)
select to_char(sysdate,'yyyy-mm-dd'),to_char(sysdate,'yyyy') year,to_char(sysdate,'mm')
month,to_char(sysdate,'dd') day from dual;
select to_char(sysdate,'fmyyyy-mm-dd') day from dual;
select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') haha from dual;
select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
select to_char(22222222222,'999,999,999,999,999,999,999') shuzi from dual;
使用“L”标记表示转换为当前语言环境下的货币符号
select to_char(22222222222,'L999,999,999,999,999,999,999') huobi from dual;
select to_date('1989-09-12','yyyy-mm-dd') from dual;
select to_number('2')+to_number('3') from dual;
在 oracle 中,不使用该函数也可以完成该功能,如下:
select ‘2’+‘3’ from dual;
通用函数主要有 NVL(),DECODE()两个,这两个函数算是 oracle 的特色函数
查看转换过程
select ename,sal,comm,nvl(comm,0) from emp;
分类:
COUNT()函数的主要功能是进行数据的统计,但是在进行数据统计的时候,如果一张表中没有记录,那么 COUNT()也会返回数据,只是这个数据是“0"
null不计算在内
当数据重复的时候分组才有意义,一个人也可以单独分一组,但是没有意义
GROUP BY 子句,语法如下:
SELECT [DISTINCT]*| 字段 [别名][字段 [别名]] | 统计函数
FROM 表名称 [别名],[表名称 [别名],...]
[WHERE 条件(s)]
[GROUP BY 分组字段 1 [,分组字段 2,...]]
[ORDER BY 排序字段 [ASC|DESC][排序字段 [ASC|DESC],...]]
1、分组函数可以在没有分组的时候单独使用,可是不能出现其他的查询字段
2、如果要进行分组,则 select 子句之后,只能出现分组的字段和统计函数,其他字段不能出现
3、分组函数允许嵌套,但是嵌套之后的分组函数的查询之中不能再出现任何的其他字段
如果要对分组后的数据再次进行过滤,需要使用 HAVING 子句,语法格式如下:
SELECT [DISTINCT]*| 字段 [别名][字段 [别名]] | 统计函数
FROM 表名称 [别名],[表名称 [别名],...]
[WHERE 条件(s)]
[GROUP BY 分组字段 1 [,分组字段 2,...]]
[HAVING 分组后的过滤条件(可以使用分组函数)]
[ORDER BY 排序字段 [ASC|DESC][排序字段 [ASC|DESC],...]]
select d.deptno,d.dname,d.loc,count(e.empno),trunc(nvl(avg(e.sal),0))
from dept d,emp e
where d.deptno=e.deptno(+)
group by d.deptno,d.dname,d.loc
having avg(sal)>2000;