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

[经验分享] Oracle-day02 下

[复制链接]
发表于 2018-9-5 10:34:23 | 显示全部楼层 |阅读模式
  五、单行函数
  (一)字符函数
DSC0000.jpg

  常用字符函数讲解:
  (1)求字符串长度 LENGTH
  语句:
  select length('ABCD') from dual;
  显示结果为:
DSC0001.jpg

  (2)求字符串的子串 SUBSTR
  语句:
  select substr('ABCD',2,2) from dual;
  显示结果为:
DSC0002.jpg

  (3)字符串拼接 CONCAT
  语句:
  select concat('ABC','D') from dual;
  查询结果如下:
DSC0003.jpg

  我们也可以用|| 对字符串进行拼接
  select 'ABC'||'D' from dual;
  查询结果同上。
  (二)数值函数
DSC0004.jpg

  常用数值函数讲解:
  (1)四舍五入函数 ROUND
  语句:
  select round(100.567) from dual
  查询结果如下:
DSC0005.jpg

  语句:
  select round(100.567,2) from dual
  查询结果如下:
DSC0006.jpg

  (2)截取函数 TRUNC
  语句:
  select trunc(100.567) from dual
  查询结果:
DSC0007.jpg

  语句:
  select trunc(100.567,2) from dual
DSC0008.jpg

  (3)取模 MOD
  语句:
  select mod(10,3) from dual
  结果:
DSC0009.jpg

  (三)日期函数
DSC00010.jpg

DSC00011.jpg

  我们用 sysdate 这个系统变量来获取当前日期和时间
  语句如下:
  select sysdate from dual
  查询结果如下:
DSC00012.jpg

  常用日期函数讲解:
  (1)加月函数 ADD_MONTHS :在当前日期基础上加指定的月
  语句:
  select add_months(sysdate,2) from dual
  查询结果如下:
DSC00013.jpg

  (2)求所在月最后一天 LAST_DAY
  语句:
  select last_day(sysdate) from dual
  查询结果如下:
DSC00014.jpg

  (3)日期截取 TRUNC
  语句:
  

  
select TRUNC(sysdate) from dual
  

  查询结果如下:
DSC00015.jpg

  语句:
  

select TRUNC(sysdate,'yyyy') from dual  

  查询结果如下:
DSC00016.jpg

  语句:
  select TRUNC(sysdate,'mm') from dual
  查询结果如下:
DSC00017.jpg

  (四)转换函数
DSC00018.jpg

DSC00019.jpg

  常用转换函数讲解:
  (1)数字转字符串 TO_CHAR
  语句:
  select TO_CHAR(1024) from dual
  查询结果:
DSC00020.jpg

  (2)日期转字符串 TO_CHAR
  语句:
  

  
select TO_CHAR(sysdate,'yyyy-mm-dd') from dual
  

  查询结果:
DSC00021.jpg

  语句:
  select TO_CHAR(sysdate,'yyyy-mm-dd hh:mi:ss') from dual
  查询结果:
DSC00022.jpg

  (3)字符串转日期 TO_DATE
  语句:
  select TO_DATE('2017-01-01','yyyy-mm-dd') from dual
  查询结果如下:
DSC00023.jpg

  (4)字符串转数字 TO_NUMBER
  语句:
  select to_number('100') from dual
  (五)其它函数
  (1)空值处理函数 NVL
  用法:
  NVL(检测的值,如果为 null 的值);
  语句:
  select NVL(NULL,0) from dual
  查询结果如下:
DSC00024.jpg

  需求:

  显示价格表中业主类型>  语句:
  

  
select PRICE,MINNUM,NVL(MAXNUM,9999999)
  
from T_PRICETABLE where OWNERTYPEID=1
  

  查询结果:
DSC00025.jpg

  (2)空值处理函数 NVL2
  用法:
  NVL2(检测的值,如果不为 null 的值,如果为 null 的值);
  需求:显示价格表中业主类型>  限”.
DSC00026.jpg

  语句:
  

select PRICE,MINNUM,NVL2(MAXNUM,to_char(MAXNUM) , '不限')  
from T_PRICETABLE where OWNERTYPEID=1
  

  (3)条件取值 decode
  语法:
  

  
decode(条件,值 1,翻译值 1,值 2,翻译值 2,...值 n,翻译值 n,缺省值)
  

  【功能】根据条件返回相应值
  需求:显示下列信息(不要关联查询业主类型表,直接判断 1 2 3 的值)
DSC00027.jpg

  语句:
  

select name,decode( ownertypeid,1,' 居 民 ',2,' 行 政 事 业 单 位  
',3,'商业') as 类型
  
from T_OWNERS
  

  上边的语句也可以用 case when then 语句来实现
  

select name ,(case ownertypeid  
when 1 then '居民'
  
when 2 then '行政事业单位'
  
when 3 then '商业'
  
else '其它'
  
end
  
) from T_OWNERS
  

  还有另外一种写法:
  

select name,(case  
when ownertypeid= 1 then '居民'
  
when ownertypeid= 2 then '行政事业'
  
when ownertypeid= 3 then '商业'
  
end )
  
from T_OWNERS
  

  六、行列转换
  需求:按月份统计 2012 年各个地区的水费,如下图
DSC00028.jpg

DSC00029.jpg

  需求:按季度统计 2012 年各个地区的水费,如下图
DSC00030.jpg

  语句如下:
DSC00031.jpg

  七、分析函数
  以下三个分析函数可以用于排名使用。
  下图为三种排名方式的举例
DSC00032.jpg

  (1) RANK
  相同的值排名相同,排名跳跃
  需求:对 T_ACCOUNT 表的 usenum 字段进行排序,相同的值排名相同,排名跳跃
  语句:
  

  
select rank() over(order by usenum desc ),usenum from
  
T_ACCOUNT
  

  结果:
DSC00033.jpg

  (2) DENSE_RANK 相同的值排名相同,排名连续
  需求:对 T_ACCOUNT 表的 usenum 字段进行排序,相同的值排名相同,排名连续
  语句:
  

select dense_rank() over(order by usenum desc ),usenum  
from T_ACCOUNT
  

  结果:
DSC00034.jpg

  (3) ROW_NUMBER
  返回连续的排名,无论值是否相等
  需求:对 T_ACCOUNT 表的 usenum 字段进行排序,返回连续的排名,无论值是
  否相等
  语句:
  

select row_number() over(order by usenum desc ),usenum  
from T_ACCOUNT
  

DSC00035.jpg

  用 row_number()分析函数实现的分页查询相对三层嵌套子查询要简单的多:
  

select * from  
(select row_number() over(order by usenum desc )
  
rownumber,usenum from T_ACCOUNT)
  
where rownumber>10 and rownumber
union all

  
select * from t_owners where>  

  结果如下:
DSC00036.jpg

  UNION 去掉重复记录
  


  
select * from t_owners where>  
union
  
select * from t_owners where>  

DSC00037.jpg

  (三)交集运算
DSC00038.jpg

  

select * from t_owners where>
intersect
  
select * from t_owners where>  

  结果:
DSC00039.jpg

  (四)差集运算
DSC00040.jpg

  

select * from t_owners where>
minus

  
select * from t_owners where>  

  结果:
DSC00041.jpg

  如果我们用 minus 运算符来实现分页,语句如下:
  

select rownum,t.* from T_ACCOUNT t where rownum

运维网声明 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.iyunv.com/thread-563471-1-1.html 上篇帖子: Oracle数据库巡检 下篇帖子: Oracle备份和恢复(RMAN篇)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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