暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

第五章Oracle常用系统函数

悦悦学姐 2021-05-25
764

第五章常用的系统函数


【目标】

  1. 了解Oracle中函数的分类

  2. 掌握Oracle中常用的系统函数

【内容】

Oracle中函数分类

  1. SQL函数分为单行函数和多行函数

  2. 按照功能分类: 字符函数,数学函数,日期函数,聚合函数,转换函数,系统函数

Oracle中常用的系统函数

  • 字符函数

Oracle中专门用来处理字符,常用的字符函数如下:


initcap(char): 首字母大写,后面的字符小写 ABCD==initcap(ABCD) Abcd


lower(char):将字符串全部转换为小写  ABCD=abcd


upper(char):将字符串全部转换为大写  ‘abcdABCD


length(char):返回字符串长度abcd=4


substr(char,m,n):取得字符串的子串,m代表开始位置,n代表结束位置


replace(char,s1,s2):将字符串chars1替换为s2


instr(char,s1[,position]):查找字符串char中是否包含S1postion代表从第几个字符开始查找。如果找到s1,就返回S1的位置;如果没有找到,返回0.


  1. 查找emp表中所有员工的姓名,要求名字以小写字母显示


Selectlower(ename) from emp;


  1. 查找emp表中所有员工的姓名,要求名字第一个字母大写,后面的字母小写。


Selectinitcap(ename) from emp;


方法二:


第一步:截取第一个字母,变大写


Selectupper(substr(ename,1,1)) from emp;


第二步:截取剩下的字符,变小写


Selectlower(substr(ename,2,length(ename)-1)) from emp;


第三步:合并第一步和第二步


Selectupper(substr(ename,1,1)) || lower(substr(ename,2,length(ename)-1))from emp;


查询emp表中姓名是5个字符的员工名字。


Select enamefrom emp where ename like _____;


Select enamefrom emp where length(ename) = 5;


查询emp表中员工命名,要求显示姓名的前面3个字母


查询emp1表中员工的姓名,如果姓名中包含A,替换为abc‘

Selectreplace(ename,A,abc)from emp;


  • 数学函数


round(n,[m]):四舍五入,没有m表示四舍五入到整数位


  m为正数,四舍五入到小数点后面m


  m为负数,四舍五入到小数点前面m


trunc(n,[m]): 截取字符串,没有m表示截取到整数位


m为正数,截取到小数点后面m


m为负数,截取到小数点前面m


floor(n):返回小于或者等于n的最大整数,向下取整


ceil(n):返回大于或者等于n的最大整数,向上取整


abs(n):返回n的绝对追


power(m,n):返回mn次幂


mod(m,n):取模

  1. 假设每个月30天,查询出emp表中员工姓名,工资,日薪(sal除以30,四舍五入到小数点后两位)


Selectename,sal,round(sal/30,2) from emp;


Trunc


Selectename,sal,trunc(sal/30,2) from emp;

  1. floor向下取整,ceil向上取整


select floor(10.9) from dual;


Select ceil(10.9) fromdual;

  1. abs(n) 取绝对值


select abs(-10) from dual;


  1. power(m,n): m的n次幂 power(5,2)


select power(5,2) from dual;


  • 日期函数


日期函数用来处理日期的函数。


Sysdate:系统日期


Months_between(d1,d2):两个日期之间的月数


Add_months(d,n):在指定的日期上加上n个月


Last_day(d):返回指定日期所在月份的最后一天


round round(d,[fmt])


round函数返回日期值,此日期四舍五入为格式模型指定的单位。


round(d):指定格式为日


round(d, ‘year’):指定格式为年


round(d,’month’):指定格式为月


round(d,’day’):指定格式为周


trunc trunc(d,[fmt])


trunc函数将指定日期截断为由格式模型指定的单位的日期


trunc(d):指定格式为日


trunc(d, ‘year’):指定格式为年


trunc(d,’month’):指定格式为月


trunc(d,’day’):指定格式为周




案例:

  1. 查询当前日期与2007529日之间有多少个月

Selectmonths_between(sysdate, 29-5-07)from dual;

  1. 查询当前日期加上2个月之后的日期

Selectadd_months(sysdate, 2) from dual;

  1. 查询当前日期,和当前月份的而最后一天

Selectsysdate, last_day(sysdate) from dual;

round:

    select sysdate,round(sysdate) from dual; 以日为标准四舍五入

    select sysdate,round(sysdate,'year') from dual;

    select sysdate,round(sysdate,month) from dual;  

    select sysdate,round(sysdate,day") from dual;

    trunc:

    select sysdate, trunc(sysdate) from dual;



    select sysdate, trunc(sysdate,”year”) from dual;

    select sysdate, trunc(sysdate,”month”) from dual;

    select sysdate, trunc(sysdate,”day”) from dual;

    查询入职时间超过6个月的员工信息



Select *from emp where add_months(hiredate, 6) < sysdate;


查询emp表中工龄满30年的员工信息


Select *from emp where add_months(hiredate, 30*12) <= sysdate;

查询emp表中每个员工的姓名,入职日期,入职天数(取整数)


Selectename,hiredate, trunc(sysdate-hiredate) from emp;


查询emp表中每个月倒数第三天入职的员工信息

Select *from emp where last_day(hiredate)-2 = hiredate;

  • 转换函数


转换函数是将数据从一种数据类型转换为另一种数据类型。


To_char():


修改系统的日期格式:altersession set nls_date_format=yyyy-MM-dd;

  1. 查询emp表中员工的姓名,入职日期,日期上加上时分秒,格式:yyyy-mm-dd hh24:mi:ss

Selectename, to_char(hiredate, yyyy-mm-ddhh24:mi:ss)from emp;


查询emp表中在1981年入职的员工信息

Select ename, hiredatefrom emp where to_char(hiredate,’yyyy’)= 1981;


查询emp表中员工的姓名,工资,并且在工资前面加上美元符号$

Selectename,to_char(sal,$9999.99)from emp;


Selectename,to_char(sal,’L9999.99’)from emp; L 本地货币符号,以电脑操作系统为准



To_date():


Selectto_date(‘19810526’,’yyyy-mm-dd’)from dual;



To_number():


Selectto_number(‘1911’)from dual;



  • 分组函数(聚合函数)


Max(),min(),avg(),sum(),count()


  1. 查询emp表中最高工资 max()



  1. 查询emp表中最低工资 min()



  1. 查询emp表中的平均工资avg()



  1. 查询emp表中工资总和 sum()



  1. 查询emp表中记录的数量 count()




  • 系统函数


用来显示数据库系统信息


sys_context('userenv’,参数)


常用参数:


terminal:当前会话客户对应的终端提示符


language: 语言


db_name: 数据库名


nls_date_format: 当前会话客户对应的日期格式


session_user:当前会话客户对应的数据库用户名


current_schema:当前会话客户对应的方案名


host:数据库所在的主机名



  1. 查询当前数据库的名字


Selectsys_context(‘userenv’,‘db_name’)from dual;


文章转载自悦悦学姐,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论