字符函数是ORACLE中最常用的函数:
Lower(char):将字符串转化为小写格式
Upper(char):将字符转化为大写的格式
Length(char):返回字符串的长度
Substr(char,m,n):取字符串的子串
Trim,Ltrim,Rtrim:去掉空格
dual 虚表 当没有表可以用的时候 就用虚表
as 当做 可以理解为别名
SELECT LOWER( 'ABCD' ) AS 字符 FROM DUAL;
select lower(ename) as 姓名 from emp;
SELECT UPPER( 'aaaaa' ) AS 字符 FROM DUAL;
= --- 一个等号 表示相等
:= --- 冒号+等号 表示赋值
|| --- 两个竖号 表示字符 连接符号
select ename as 姓名, length(ename) as 长度 from emp where length(ename)=5 ;
1 表示从第一个字符开始,3 表示取3个字符
select ename as 姓名 , substr(ename,1,3) as 前三个字符 from emp;
select 'A'|| trim(' B B ') ||'C' from dual;
以首字母大写的方式显示所有员工
select ename, (substr(ename,0,1) ||lower(substr(ename,2,length(ename)-1 )) ) as 姓名 from emp;
Replace (char1,search_string,replace_string)
显示所有的员工姓名将A替换成“我是A”
Instr(char1,char2,[,n[,m]])取字符串的位置
从第二个字符开始找到员工姓名中A所在的位置
select ename, replace(ename,'A','我是A') as replacename from emp;
从ename中的第2个字符开始找A,找第1个
select ename, instr(ename,'A',2,1) from emp;
数学函数的输入参数和返回值的数据类型都是数字类型:
常用函数
Round(n,[m])
四舍五入,如果省掉m,则四舍五入到整数,如果m是整数,则四舍五入到小数点的m位置后,如果是m负数,则 四舍五入到小数点m的位前
? 73.2564 四舍五入到小数点后2位
trunc(n,[m])
用户截取数字,如果省略m,就截去小数部分,如果m是整数就截取到小数点后m位后,如果m是负数,则截取到小数点的前m位
? 73.2564 截取到小数点后3位
Mod(n,[m])取模
? 8%3=?
Floor(n)
返回小于或是等于n的最大整数 向下取整
? 7.5846 向下取整
Ceil(n)
返回大于或是等于n的最小整数 向上取整
?7.5846 向上取整
对数字的处理在银行和财务系统用的比较多。
--默认四舍五入到整数,四舍五入到小数点后2位
select round(73.2564,2) from dual;
--默认截取到整数,2表示截取到小数点后2位
select trunc(73.2564,2) from dual;
--取余数
select mod(8,3) from dual;
select Floor(7.5846) from dual;
select ceil(7.5846) from dual;
/*
1 sysdate :返回系统时间 oracle所在服务器的时间
2 current_date 返回当前时间 程序所在客户机的时间
3 Next_day(date,week) 给定时间的下一个星期是几号
4 add_months(d,n):返回在时间d上加n个月的时间
5 last_day(d):返回指定日期所在月份的最后一天
select sysdate,current_date from dual;
下周一是几号
select next_day(sysdate,'Monday') from dual;
十年前
select add_months(sysdate,-10*12) from dual;
本月的最后一天
select last_day(sysdate) from dual;
--显示满30年份服务年限的员工的姓名和受雇日期
select * from emp where add_months(sysdate,-30*12) > hiredate ;
--每个员工加入公司的天数
select round ((sysdate-hiredate)) as days from emp;
--找出各月倒数第三天受雇的所有员工
select * from emp where (last_day(hiredate)-2 )=hiredate ;
to_char
yyyy:显示年份
yy :显示年份后2位
mm:月份
dd:号
hh /hh24:小时
mi分
ss秒
select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
to_char
9 :显示数字
0 :不足则补0
. :显示小数点
,; 显示分隔符
$ : 显示美元符号
L : 显示本地货币
C : 显示国际货币符号
G : 制定位置显示分割符号
D : 制定位置显示小数点符号
薪水指定货币符号
select ename, sal,to_char(sal,'L00,999.99') from emp;
select ename, sal,to_char(sal,'L00G999D99') from emp;
to_date 字符转换成日期类型
select to_date('15-9月-10') from dual;
To_number 字符转换成数字类型
select to_number('001') from dual;
select to_date('2017-3-15','yyyy-mm-dd') as days from dual;
select to_number('009')+1 from dual;
Sum 求和
Avg 平均值
Max 最大值
Min 最小值
Count 有值的记录条数
聚集函数不能作为条件放到where后面
--分组group by 求和 sum ---先根据deptno分组,再根据job来分组 ,将分完组之后的 sal 加起来
select deptno,job, sum(sal) from emp group by deptno,job;
--根据部门求平均工资
select deptno ,avg(sal) from emp group by deptno;
--请查询出每个部门的最高工资和最低工资
select deptno,max(sal),min(sal) from emp group by deptno;
--统计每个部门有多少个员工
select deptno ,count(*) from emp group by deptno;
1 、user 显示用户
2 、decode 布尔判断函数
3 、nvl 空值函数
select user from dual;
select count(*) from emp where job='CLERK'
select job ,decode( job ,'CLERK','A','B' ) from emp ;
-- 将所有的人的奖金加50 nvl(comm,0) 如果comm是null就设置为0 否则就是原来的数据
update emp set comm=nvl(comm,0)+50 ;