设为首页 收藏本站

运维网

查看: 263|回复: 0

[经验分享] Oracle中的单值函数

[复制链接]

尚未签到

发表于 6 天前 | 显示全部楼层 |阅读模式
  Oracle的函数
  Oracle函数可以分为单值函数和分组函数两大类,单值函数又分为字符函数、日期和时间函数、数字函数、转换函数和混合函数:分组函数右count、max、min、avg、sum,都可以和group by 搭配使用。
  单值函数
  1、字符函数
  l字符串连接函数
  问题:把员工的姓名和工作类型连在一起使用"-"分隔
  函数:concat(字符串1,字符串2)
  select concat(concat(ename,'-'),job) from emp;
  扩展点:字符串连接符号 " || "
  select ename || '-' || job from emp;
  l右对齐函数
  问题:将员工的姓名右对齐显示
  函数:lpad(待处理的字符串,预留位置,填充符号)
  select lpad(ename,10,' ') from emp;
  l字符串截取函数
  问题:截取员工姓名的前3个字符和字符4以后的内容显示
  函数:substr(字符串,起始位置,截取的个数)
  substr(字符串,起始位置)--默认截取到最后
  select ename, substr(ename,1,3),substr(ename,4) from emp;
  l字符查找函数
  问题:字母'T'在员工姓名中第一次出现和第二次出现的位置
  函数:instr(字符串,查找的字符,查找的起始位置,出现的次数)
  select ename, instr(ename,'T',1,1) as A, instr(ename,'T',1,2) as B from emp;
  扩展:员工姓名中不含M的员工
  select ename from emp where instr(ename,'M',1,1)=0
  l首字母大写函数
  问题:员工姓名首字母大写显示
  函数:initcap(字符串)
  select initcap(ename) from emp;
  l小/大写函数
  问题:将员工姓名大写转换
  函数:upper(字符串)/lower(字符串)
  select upper(ename) , lower(ename) from emp;
  l字符串替换函数
  问题:将姓名中的M全部替换成'*'显示
  函数:replace(字符串,带替换的字符,替换后的字符)
  select replace(ename,'M','*') from emp;
  l字符串长度函数
  问题:找出姓名长度大于5的员工姓名
  函数:length(字符串)
  select ename from emp where length(ename)>5;
  2、日期函数
  l系统时间
  问题:返回系统的当前时间
  函数:sysdate
  说明:1、函数没有“( )”
  2、dual 是一张无意义的表,在Oracle专门用于函数的测试
  select sysdate from dual;
  使用一个to_char,转换函数类型
  将时间类型转成字符类型
  函数:to_char(时间数据,格式)
  select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
  格式:yyyy 年
  mm 月
  dd 日期
  d 一周中的第几天
  ddd 一年中的第几天
  day 周
  month 月份
  hh24 24小时制
  l日期修改函数
  问题:将系统时间添加2个月显示
  函数:add_months(时间数据,添加的月份)
  select add_months(sysdate,2) from dual;
  l日期差函数
  问题:显示员工入职时间的月份统计
  函数:months_between(时间1,时间2)
  select ename,hiredate,months_between(sysdate,hiredate) from emp;
  3、转换函数
  lto_char()见上例
  l时间转换函数
  函数:to_date(时间数据字符串,格式)
  insert into 表名 values(to_date('2009-12-12','yyyy-mm-dd'));
http://blog.51cto.com/e/u/themes/default/images/spacer.gif案例1:查询在12年前参加工作的员工

  Select ename,hiredate from emp where months_between(sysdate,hiredate)>144
http://blog.51cto.com/e/u/themes/default/images/spacer.gif案例2:查询在当月倒数第三天参加工作的员工

  函数:last_day(时间数据)-> 返回该日期所在月份的最后一天
  select ename,hiredate from emp where last_day(hiredate)-2 = hiredate;
http://blog.51cto.com/e/u/themes/default/images/spacer.gif案例3:查询每个员工的工作天数

  格式:时间1-时间2 -->返回相差的天数
  select ename,hiredate,sysdate-hiredate from emp;
  4、数学函数
  lround(数字) 四舍五入
http://blog.51cto.com/e/u/themes/default/images/spacer.gif案例:按每月30天计算员工的每日薪水,要求计算结果四舍五入到小数点后2位

  函数:round(数字,精度)
  select ename,round(sal/30,2) from emp;
  ltrunc(数字) 取整函数->只保留整数部分
http://blog.51cto.com/e/u/themes/default/images/spacer.gif案例:查询员工工作了多少个月

  select ename,trunc(months_between(sysdate,hiredate)) from emp;
  lfloor(数字) 向下取
  floor(1.9)-> 1
  lceil(数字) 向上取
  ceil(1.1) -> 2花费
  labs(数字) 取绝对值函数
  lmod(数字1,数字2) 取余函数
  mod(5,4) -> 1
  lpower(数字,n次方)
  power(2,4) -> 16
  作者:中软卓越天津ETC


运维网声明 1、欢迎大家加入本站运维交流群:群①:263444886群②:197202523群③:485755530群④:201730672群⑤:202807635运维网交流群⑥:281548029
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须注明原文的出处
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、运维网 - 服务您的运维操作管理专家!
6、联系人Email:admin@yunvn.com 网址:www.iyunv.com

点击关注更多内容
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则  允许回帖邮件提醒楼主

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服 E-mail:kefu@yunvn.com

本站由青云提供云计算服务

运维网--中国最专业的运维工程师交流社区

京ICP备14039699号-1 Copyright © 2012-2018

使用手机软件扫描微信二维码

关注我们可获取更多热点资讯

Good good study day day up !


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


独家合作伙伴: 青云cloud

快速回复 返回顶部 返回列表