5.常用函数和运算符

一:运算符

【逻辑运算符】

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;

【字符函数】

      用于处理与字符相关的业务

(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为负数表示小数点向左截取


猜你喜欢

转载自blog.csdn.net/RachelHYC/article/details/79081089