Oracle单行查询

Posted 学习笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle单行查询相关的知识,希望对你有一定的参考价值。

单行查询也叫作单行函数,使用某个函数对数据进行操作
 关于基本查询:oracle基本查询
  1 SQL> select lower(\'Hello WOrld\') 转小写,
  2      upper(\'Hello WOrld\') 转大写,
  3      initcap(\'hello world\') 首字母大写
  4   2  from dual;
  5  
  6  
  7 SQL> --substr(a,b)取子串, 从a中,第b位开始取 ,直到末尾
  8 SQL> select substr(\'Hello World\',3) 子串 from dual;
  9 SQL> --substr(a,b,c) 从a中,第b位开始取,取c位
 10 SQL> select substr(\'Hello World\',3,4) 子串 from dual;
 11  
 12  
 13 SQL> --length 字符数  lengthb字节数
 14 SQL> select length(\'Hello World\') 字符,lengthb(\'Hello World\') 字节 from dual;
 15  
 16  
 17 SQL> --lpad 左填充  rpad 右填充
 18 SQL> -- abcd  填充成10位
 19 SQL> select lpad(\'abcd\',10,\'*\') 左,rpad(\'abcd\',10,\'*\') 右 from dual;
 20 左         右                                                                                                                                        
 21 ---------- ----------                                                                                                                                 
 22 ******abcd abcd******
 23  
 24 SQL> --trim 去掉前后指定的字符
 25 SQL> select trim(\'H\' from \'Hello WorldH\') from dual;
 26  如果前面后者后面指定的字符有多个,那么也会都去掉比如:hhhello,会把h都去掉
 27  
 28 SQL> --replace 替换
 29 SQL> select replace(\'Hello WOrld\',\'l\',\'*\') from dual;
 30 REPLACE(\'HE                                                                                                                                           
 31 -----------                                                                                                                                           
 32 He**o WOr*d
 33  
 34 SQL> --四舍五入 ,如果位数为负数,那么就会往前推,-1看个位保存到十位,-2看十位保存到百位
 35 SQL> select round(45.926,2) 一,
 36      round(45.926,1) 二,
 37      round(45.926,0) 三,
 38      round(45.926,-1) 四,
 39      round(45.926,-2) 五
 40      from dual;
 41  
 42         一         二         三         四         五                                                                                                
 43 ---------- ---------- ---------- ---------- ----------                                                                                                
 44      45.93       45.9         46         50          0   
 45  
 46 SQL> --截断 ,从位数后面直接截断,个位为0位
 47 SQL> select trunc(45.926,2) 一,
 48      trunc(45.926,1) 二,
 49      trunc(45.926,0) 三,
 50      trunc(45.926,-1) 四,
 51      trunc(45.926,-2) 五
 52   2* from dual
 53 SQL> /
 54  
 55         一         二         三         四         五                                                                                                
 56 ---------- ---------- ---------- ---------- ----------                                                                                                
 57      45.92       45.9         45         40          0   
 58  
 59 SQL> --当前时间
 60 SQL> select sysdate from dual;
 61 SQL> --格式化时间
 62 SQL> select to_char(sysdate,\'yyyy-mm-dd hh24:mi:ss\') from dual;
 63 时间可以进行运算,不允许相加
 64 SQL> select (sysdate-1) 昨天,sysdate 今天,(sysdate+1) 明天 from dual;
 65 昨天           今天           明天                                                                                                                  
 66 -------------- -------------- --------------                                                                                                          
 67 30-6月 -16     01-7月 -16     02-7月 -16
 68  
 69 SQL> --months_between 相差的月数 ,显示两个数据之间间隔的月份数量
 70 SQL> select ename,hiredate,(sysdate-hiredate)/30 一,
 71      months_between(sysdate,hiredate) 二
 72   2  from emp;
 73 通过上面的这条语句我们发现,单纯的/30是不准确的
 74  
 75 SQL> --add_months 月份进行计算操作,加上多少个月之后
 76 SQL> --53个月后
 77 SQL> select add_months(sysdate,53) from dual;
 78  
 79 SQL> --last_day 获取传入时间当月的最后一天
 80 SQL> select last_day(sysdate) from dual;
 81  
 82 SQL> --next_day 从传入日期开始下一个指定星期几 
 83 SQL> --下一个星期五
 84 SQL> select next_day(sysdate,\'星期五\') from dual;
 85 应用
 86 SQL> /*
 87 SQL> next_day的应用:每个星期一自动备份表中的数据
 88 SQL> 1. 分布式数据库
 89 SQL> 2. 触发器  快照
 90 SQL> */
 91 对日期进行四舍五入操作,默认当前时间为2016-07-01
 92 SQL> select round(sysdate,\'month\'),round(sysdate,\'year\') from dual;
 93 ROUND(SYSDATE, ROUND(SYSDATE,                                                                                                                         
 94 -------------- --------------                                                                                                                         
 95 01-7月 -16     01-1月 -17   
 96  
 97 将日期转换成字符,to_char(数据,format)
 98 SQL> select to_char(sysdate,\'yyyy-mm-dd hh24:mi:ss"今天是"day\') from dual;
 99 TO_CHAR(SYSDATE,\'YYYY-MM-DDHH24:MI                                                                                                                   
100 ----------------------------------                                                                                                           
101 2016-07-01 12:27:22今天是星期五  
102  
103 SQL> --查询员工薪水:两位小数,千位符,本地货币代码 L
104 SQL> select to_char(sal,\'L9,999.99\') from emp;
105 TO_CHAR(SAL,\'L9,999                                                                                                                                   
106 -------------------                                                                                                                                   
107            ¥800.00
108  
109 SQL> --通用函数
110  
111 SQL> --nvl2(a,b,c) 当a=null的时候,返回c;否则返回b
112      nvl(a,b)当a=null的时候,返回b;否则返回a
113 SQL> select sal*12+nvl2(comm,comm,0) from emp;
114  
115 SQL> --nullif(a,b) 当a=b的时候,返回null;否则返回a
116 SQL> select nullif(\'abc\',\'abc\') 值 from dual;
117  
118 SQL> --coalesce 从左到右 找到第一个不为null的值
119 SQL> select comm,sal,coalesce(comm,sal) "第一个不为null的值" from emp;
120  
121 case when 的用法
122  
123 举例,涨工资:
124  
125 sql99的语法
126 SQL> select empno,ename,job,sal 涨前,
127   2         case job when \'PRESIDENT\' then sal+1000
128   3                  when \'MANAGER\' then sal+800
129   4                  else sal+400
130   5          end 涨后
131   6  from emp;
132  
133 sqlplus语法,decode语句
134 SQL> select empno,ename,job,sal 涨前,
135   2         decode(job,\'PRESIDENT\',sal+1000,
136   3                    \'MANAGER\',sal+800,
137   4                              sal+400) 涨后
138   5  from emp;

 

 
 
 
 

以上是关于Oracle单行查询的主要内容,如果未能解决你的问题,请参考以下文章

单行子查询在 Oracle 中返回多于一行

Oracle 单行子查询在使用嵌套子查询时返回多行

Oracle-子查询实例

oracle 11g 透视查询优化 - 多行到单行

Oracle04基本查询+条件查询+排序+单行函数+通用函数介绍

JavaScript单行代码,也就是代码片段