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单行查询的主要内容,如果未能解决你的问题,请参考以下文章