一:运算符
【逻辑运算符】
and | 与 | 多个条件同时满足才能够显示出数据。 |
or | 或 | 只要满足一个条件,就匹配成功,显示数据。 |
not | 非 | 通常与between ……and ;in ; like 结合使用,如 not in |
【连接运算符】
|| :用于将多个字符串或数据值合并成一个字符串。通过使用连接操作符可以将表中的多个列合并成逻辑上的一列。
select ename||sal from emp where empno = 7369;
或 email= to_char(TRUNC(10000+90000*dbms_random.value)) || '@163.com'
二:函数
【日期函数】
(1) add_months ( 日期,数字)
add_months(sysdate,3) 表示 当前日期加上2两个月,返回 : 2018/3/17
--请查询最近3个月入职的员工
select * from emp where add_months(hiredate, 3) >sysdate;
select * from emp where hiredate>add_months(sysdate, -3);
(2)months_between(日期1,日期2)
返回日期一和日期2相差的月份
select months_between(sysdate,'17-4月-2014' ) from dual;
(3)last_day(日期)
返回指定日期中的月份的最后一天的日期
(4)next_day(日期,星期)
返回指定日期的下一个指定星期的日期,即在未来日期中,离得最近的指定星期的日期
如:next_day(sysdate,'星期五'),显示 2018/1/19
(5) extract() 截取时间函数
select extract(year from sysdate) 年 from dual;
select extract(month from sysdate) 月 from dual;
select extract(day from sysdate) 日 from dual;
(6)日期减法
当前时间减去7分钟的时间
select sysdate,sysdate - interval '7' MINUTE from dual;
当前时间减去7小时的时间
select sysdate - interval '7' hour from dual;
当前时间减去7天的时间
select sysdate - interval '7' day from dual;
当前时间减去7月的时间
select sysdate,sysdate - interval '7' month from dual;
当前时间减去7年的时间
select sysdate,sysdate - interval '7' year from dual;
时间间隔乘以一个数字
select sysdate,sysdate - 8*interval '7' hour from dual;
【字符函数】
用于处理与字符相关的业务
(1)字符串的首字母变成大写 initcap(char)
(2)字符串全部变成小写 lower(char)
(3)字符串全部变成大写 upper(char)
(4)去除字符串最左边的数据 ltrim(char, set)
select ltrim ('abcmkd', 'abc') from dual;
--结果:mkd,去除字符串最左边和abc值相同的数据
(5)去除字符串最右边的数据 rtrim(char, set)
select rtrim('xyzadams', 'ams') from dual;
(6)替换字符 translate(char, from, to)
select translate('jack', 'j', 'b') from dual;
--字符 j 替换成 字符 b
(7)替换字符串 replace(char, searching, [rep, string])
--显示所有员工的姓名,并用‘我是A’替换所有的A
select replace(ename, 'A', '我是A') from emp;
(8)查找字符串出现的位置 instr(char1 , char2, m, n)
char1 :被搜索的字符串
char2: 要查找的字符串
m :开始搜索的位置,默认为1,
n :第几次出现,默认为1。
注意:返回值是数字,表示出现的位置。
无论从第几位开始,字符串首字母的位置才是 1 ,而不是查询的起始位置为1。
--请找出d在worldwide中第二次出现的位置。
select instr('worldwide', 'd', 1, 2) from dual;
--找出d在worldwide中第一次出现的位置。
select instr ('worldwide', 'd') from dual;
(9)截取字符串 substr (char, m, n)
char:代表要截取的字符串
m:代表从第几位开始
n:代表截取几位,没有n表示截取到结尾
select substr('abcdefg', 3, 2) from dual;
应用例子: 假如想要截取邮箱的域名,域名可能是.com .cn三位或者两位数,可以利用 instr 找到 .的位置 ,再用substr截取,起始位置就是 instr的返回值结果+1 ,就可以截取 .com , .cn
【转换函数】
(1) to_char()
1. 可以把日期类型转换成字符串
select to_char(sysdate, 'yyyy-mm-dd') from dual;
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual;
(2)to_date()
insert into emp (empno, hiredate) values( 8888, to_date('1882-1-1', 'yyyy-mm-dd'));
注意:添加check约束,对日期进行限制时,没法用 borndate >'22-1月-2012' 这种写法,只能用to_date('2012-01-22', 'yyyy-mm-dd')
(3) to_number()
将字符串转换为数字
select to_number('1999') from dual;
【聚合函数】
(1)sum( ) 求和
(2)avg( ) 求平均数
(3)max( ) 求最大值
(4)min( ) 求最小值
(5)count( ) 统计
(1) 显示所有员工中的最高工资和最低工资?
select max(sal) , min(sal) from emp;
(2)显示所有员工中最高和最低的年工资信息?
Select max(sal * 12 +nvl(comm, 0)*12 ),min(sal * 12 +nvl(comm, 0)*12)
fromemp;
(3) 显示所有员工的平均工资和工资之和?
select avg(sal) , sum(sal) from emp;
【数学函数】
(1) abs:返回指定值的绝对值
(2)ceil:返回大于或者等于给出数字的最小整数 ,向上取整
(3)floor:返回小于或者等于给出数字的最大整数,向下取整
(4)round:四舍五入
(5)trunc:截断函数,如果截断函数没有指定截取到第几位,则默认截取整数部分
select trunc(3.56) from dual; -- 3
select trunc(3.5678, 2) from dual -- 3.56
selecttrunc(3562.45, -2) from dual;-- 3500
注意:trunc(num,n),n为正数表示小数点向右截取 ,n为负数表示小数点向左截取