• Oracle数据库3--常用函数


    1.函数概念

    函数一般是在数据上执行的,它给数据的转换和处理提供了方便。只是将取出的数据进行处理,不会改变数据库中的值。

    函数根据处理的数据分为单行函数和聚合函数(组函数)。

    单行函数对单个数值进行操作,并返回一个值。

    组函数又被称作聚合函数,用于对多行数据进行操作,并返回一个单一的结果,组函数仅可用于选择列表或查询的having子句

    2.字符相关函数

    -- dual用于测试
    select * from dual;
    
    -- 1.字符串连接
    select concat('aa','12') from dual;
    select 'aa'||'12' from dual;
    
    -- 2.首字母大写
    select initcap('abc') from dual;
    --- 把大写转化小写
    select lower('ABc') from dual;
    select upper('abc') from dual;
    
    -- 把所有员工的姓名小写输出
    select lower(e.ename),e.empno
    from emp e
    
    -- 3.填充字符lpad/rpad
    select lpad('sxt',5,'*') from dual;
    select rpad('sxt',5,'*') from dual;
    
    -- 4.去掉空白字符
    select '  kallen' from dual;
    select ltrim('  kallen',' ') from dual;
    select rtrim('  kallen  ',' ') from dual;
    -- trim 删除左右两边的字符
    select trim('a' from 'abc') from dual;
    
    -- 5.求子串 substr(str,loc,len)-->loc从1开始
    select substr('abcd',2,2) from dual;
    
    -- 6.查找字符串
    /*
    如果找到返回>=1的索引;如果没找到返回0
    */
    select instr('abcd','b') from dual;
    
    -- 7.求长度
    select length('abcd') from dual;

    3.数值型函数

    -- 数值型函数
    -- 四舍五入round(x,y)对x保留y为小数
    select round(23.652) from dual;
    select round(23.652,1) from dual;
    select round(25.652,-1) from dual;
    
    -- 返回x按精度y截取后的值
    select trunc(23.652) from dual;
    select trunc(23.652,2) from dual;
    select trunc(23.652,-1) from dual;
    
    -- mod(x,y)求余数
    select mod(9,2) from dual;
    
    -- ceil 向上取整
    select ceil(1.9) from dual;
    -- floor 向下取整
    select floor(1.9) from dual;

    4.日期时间函数

    4.1  日期函数

    -- 返回系统当前时间
    select sysdate from dual;
    -- 返回当前会话时区中的当前日期 
    select current_date from dual;
    
    -- 添加月数
    select add_months(sysdate,1) from dual;
    -- 返回两个时间相差的月数
    select months_between(sysdate,add_months(sysdate,2)) from dual;
    
    -- 需求:查询工作年限在30年以上
    select e.ename,e.hiredate
    from emp e
    where months_between(sysdate,e.hiredate)/12 > 30
    
    -- 返回date所在月份最后的一天
    select last_day(add_months(sysdate,1)) from dual;
    -- next_day(date1,week) 返回date1下周星期几的日期
    select sysdate "当时日期",next_day(sysdate,'Monday') "下周星期一" from dual;
    
    -- 查询会话的环境参数
    select * from nls_session_parameters;

    4.2日期计算函数

    两个时间进行四则运算的单位是天。

    select sysdate+2 from dual;
    select sysdate-2 from dual;

    5.转换函数

    转换函数就是把字符、日期、数值型数据进行相互转换。类型转换分两种:隐式类型转换和显式类型转换。

    5.1隐式类型转换

    -- 字符隐式转换成数值
    select '100' - 10 from dual;
    
    -- 字符隐式转化为日期
    -- DD-MON-RR 默认的日期格式
    select 1 from dual
    where sysdate > '13-May-19';
    
    -- 查date format格式
    select * from nls_session_parameters;

    5.2显示类型转换

    5.2.1 to_char

    把日期转化成字符

    把数值格式化成字符串

    -- to_char
    -- 【1】把日期转化成字符
    -- 按照默认格式DD-MON-RR
    select to_char(sysdate) from dual;
    -- 按指定格式
    select to_char(sysdate,'YYYY"年"MM"月"DD"日" HH24:MI:SS') as t from dual;
    
    -- 【2】把数值格式化成字符串
    select to_char(12345,'99999.99') from dual;
    select to_char(12345,'99,999.99') from dual;
    select to_char(12345,'999,999.99') from dual;
    -- 不够位置0
    select to_char(12345,'000,000.00') from dual;
    -- 格式化成美元显示
    select to_char(12345,'$000,000.00') from dual;

    5.2.2 to_number、to_date

    -- to_number
    select to_number('$12,345','$99,999') from dual;
    select to_number('$12,345.12','$99,999.99') from dual;
    
    -- to_date
    select to_date('14-May-19','DD-MON-RR') from dual;
    select to_date('2004-09-19','YYYY-MM-DD') from dual;
    -- 查询雇用期满6个月的下一个周一的日期。
    select e.ename,e.hiredate,next_day(add_months(e.hiredate,6),'Monday')
    from emp e
    where months_between(sysdate,e.hiredate) > 6
    
    -- 查询公司boss
    select e.ename || nvl(to_char(e.mgr),' is boss')
    from emp e
    where e.mgr is null

    5.2.3 decode/case when

    decode(条件,值1,“返回值1”, 值2,“返回值2”,,,“默认值”)

    -- 需求:查询员工所在的部门名称
    select 
    e.ename,
    e.deptno,
    decode(e.deptno,10,'部门1',20,'部门2',30,'部门3','未知')
    from emp e;
     

    case when:

    -- case when
    select 
    e.ename,
    e.deptno,
    case e.deptno
      when 10 then '部门1'
      when 20 then '部门2'
      when 30 then '部门3'
      else '未知'
    end
    from emp e;
    -- 需求:对各个部门进行涨薪,10->1.1 20->1.2 30->1.3 其他->1.0
    select 
    e.deptno,
    e.ename,
    e.sal "涨薪前",
    decode(e.deptno,10,e.sal*1.1,20,e.sal*1.2,30,e.sal*1.3,e.sal) "涨薪后"
    from emp e
    
    -- 需求:根据工资分布输出以下信息
    /*
     <1000 真屌丝
     (1001,2000] 屌丝
     (2001,3000] 白领 
     (3001,5000] 高富帅
     (5001,10000] 土豪
    */
    
    select 
    e.ename "姓名",
    e.sal "工资",
    case
      when e.sal <= 1000 then '真屌丝'
      when e.sal <= 2000 then '屌丝'
      when e.sal <= 3000 then '白领'
      when e.sal <= 5000 then '高富帅'
      when e.sal <= 10000 then '土豪'
    else '未知'
    end "描述"
    from emp e;

    总结:decode 多用于等值匹配;case when可以用于等值,多用于条件分支。

    6.组函数

    组函数把多行数据经过运算后返回单个值。也称聚合函数。

    -- 求公司雇员的数量
    select count(*)
    from emp e;
    
    select count(e.empno) 
    from emp e;
    
    select count(1)
    from emp e;
    
    -- avg:对多个记录的某个字段求平均值
    -- 需求:求底薪的平均值
    select avg(e.sal)
    from emp e;
    
    
    -- 需求:求雇员的最高薪资/最低薪资
    select max(e.sal),min(e.sal),avg(e.sal)
    from emp e;
    
    -- 需求:求公司一个月的员工基本开销
    select sum(e.sal)
    from emp e;

    注意:

    [1] 组函数或聚合函数是对一个数据集(表数据、查询出来的表、分组的表)进行聚合。

    [2] 聚合函数对字段是null的值进行忽略。count(*) 

    -- 求有津贴的员工的数量
    select count(e.comm)
    from emp e;

    [3] max/min 适合任意数据类型,sum/avg 只适用于数值类型。

    聚合函数的结果可以作为其他查询条件。

    -- 最早入职的员工
    select e.ename,e.hiredate
    from emp e
    where e.hiredate = (select min(e.hiredate) from emp e);
  • 相关阅读:
    ruby 二进制转十进制 Integer("0b101") = 5
    开始菜单和我的文档的我的图片及我的音乐变成 my pictrues 正常图标了
    ruby watir 莫名其妙的错误
    Excel SaveAS是去掉提示框
    apache && jboss安装
    ruby require include的区别
    ruby控制鼠标
    This error is raised because the column 'type' is reserved for storing the class in case of inheritance
    用正则表达式限制文本框只能输入数字,小数点,英文字母,汉字等各类代码
    ASP.NET 如何动态修改 Header 属性如添加 Meta 标签 keywords description!
  • 原文地址:https://www.cnblogs.com/WhiperHong/p/10864757.html
Copyright © 2020-2023  润新知