设为首页 收藏本站
查看: 1289|回复: 0

[经验分享] oracle基础知识2_单行函数

[复制链接]

尚未签到

发表于 2016-7-28 02:19:00 | 显示全部楼层 |阅读模式
  
  dual 是一个 用来测试函数和表达式的伪表
  
  
  内容分为 单行  多行 函数两块:
  
  
DSC0000.jpg
  
  
  字符函数:
  
  1 大小写函数
  
  select lower('Hello world') as 转小写, upper('Hello World') as 转大写,initcap('zm') as 首字母大写  from dual;
转小写转大写首字hello worldHELLO WORLDZm  
  2 截取函数
  --substr(a,b) 从a中,第b位开始取,取右边所有的字符
  select substr('hello world',3) from dual;
  
  --substr(a,b,c) 从a中,第b位开始取,取c位
  select substr('hello world',3,4) from dual;
  
  3 字符/字节长度
  --length 字符数  lengthb 字节数
  select length('中国')  字符数,lengthb('中国')  字节数 from dual;
字符数字节数24
 
  4 instr 查询子串位置
  instr(a,b) 从a中查找b,找到返回下标(从1开始计数),否则返回0
  select instr('hello world','ll') from dual;
LOCATION3  
  5 左/右填充  lpad(src,10填满后长度,str用这个字符来填充)
  select lpad('abcd',10,'*') 左,rpad('abcd',10,'*') 右 from dual;
左右******abcdabcd******  
  6 trim(不仅仅是去掉空格)
  select trim('H' from  'Hello WorldH') as trim from dual;
  
TRIMello World  
 7 替换函数 replace
  select replace('hello world','l','*') as replaceres from dual;
REPLACEREShe**o wor*d  
  
  
  数字函数:
  
  1 四舍五入 ROUND(srcNum, 保留小数位数) 
  select ROUND(45.926, 2) 一,ROUND(45.926, 1) 二,ROUND(45.926, 0) 三,ROUND(45.926, -1) 四, ROUND(45.926, -2) 五   from dual;
  
一二三四五45.9345.946500
 
  2 截断函数 TRUNC (仅仅是截断,不会四舍五入)
  select TRUNC(45.926, 2) 一,TRUNC(45.926, 1) 二,TRUNC(45.926, 0) 三,
        TRUNC(45.926, -1) 四, TRUNC(45.926, -2) 五   from dual
  
一二三四五45.9245.94540  
  
  日期函数:
  
  oracle只有  date, datestamp 两种类型, mysql有三种,date,datatime, datestamp;
  
  select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as time from dual;
TIME2014-06-04 13:53:15  select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss:ff') as time from dual;
TIME2014-06-04 13:50:56:045000
  
  日期格式的元素:
格式举例
YYYY2010
YEAR年的英文名称  twenty ten
MM两位数字 不足补0   06
MONTH4月
DY星期一
DAY星期一
DD一个月的第几天 02
  
  
  转换函数:
  
  数据类型转换分为两种: 显示 和  隐式
  
  oracle自动隐式转换如下:
  
源数据类型目标数据类型
varchar2/charnumber
varchar2/chardate
numbervarchar2
datevarchar2
  
  eg: select * from emp where hiredate = '17-11月-81';  这就是典型将符合oracle日期格式的字符串隐式转换成日期后在查询的例子。
  
  显示函数:
  
  1 to_char
  to_char函数常用到的格式:
9数字
0
$美元
L本地货币符号
.小数点
,千位符
  
  select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss"今天是" day') as today from dual;
  
TODAY2014-06-04 14:51:25今天是 星期三  
  利用 to_char函数,将工资显示的转化成我们想看到的格式:
  select to_char(sal,'L9,999.99') as sal from emp;
SAL¥6,000.00¥800.00¥1,600.00¥1,250.00¥2,975.00¥1,250.00¥2,850.00  
  
  
  通用函数:
  
  nvl2(a,b,c) 当a=null时,返回c,否则返回b
  select sal*12+nvl2(comm,comm,0) from emp;
  
年薪7200096001950015500357001640034200  
  
  条件表达式:
  
  1 case:
  select ename,job,sal as 原始薪 ,
    case job when 'PRESIDENT'  then sal + 1000
             when 'MANAGER' then sal+800
             else sal + 300
    end as 长后薪

from emp;
  
ENAMEJOB原始薪长后薪Tom_ABCD 60006300SMITHCLERK8001100ALLENSALESMAN16001900WARDSALESMAN12501550  
  2 decode
  
  decode (col|expression,  search1, result1[, search2, result2,...,]
  [,default])
  看col|expression的数值,如果是search1,则执行 result1,如果是search2,则执行 result2... 如果都不说,则执行default
  
  select ename,job,sal 涨前薪水,
          decode(job,'PRESIDENT',sal+1000,
                      'MANAGER',sal+800,
                                sal+400) 涨后薪水
    from emp;
  
ENAMEJOB涨前薪æ涨后薪æTom_ABCD 60006400SMITHCLERK8001200ALLENSALESMAN16002000WARDSALESMAN12501650  
  
  案例: 统计 1980,1981,1982,1987年入职的员工:
  
  select count(*) Total,
           sum(decode(to_char(hiredate,'RR'),'80',1,0)) "1980",
           sum(decode(to_char(hiredate,'RR'),'81',1,0)) "1981",
           sum(decode(to_char(hiredate,'RR'),'82',1,0)) "1982",
           sum(decode(to_char(hiredate,'RR'),'87',1,0)) "1987"
    from emp;
  
TOTAL19801981198219871511012  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-250266-1-1.html 上篇帖子: ORACLE 定时执行存储过程(转) 下篇帖子: Oracle PRM与JVM以及OS
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


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


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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