Oracle学习第二篇—单行函数
1字符函数
length 字符长度 lengthb 字节长度 lower 变为小写 upper 变为大写 initcap 首字母大写 |
select Lower('xun Ying') 小写,Upper('xun Ying') 大写, initcap('xun Ying') 首字母大写 from dual |
lpad 左填充 rpad 右填充 trim 去掉前后指定的字符 replace instr 在母串中查找子串,找到返回下标(从1开始),否则返回0 |
1 select lpad('abcd',10,'*') 左,rpad('abcd',10,'*') 右 2 select trim('H' from 'Hello WorldH') from dual; 3 select replace('Hello World','l','*') from dual; 4 select instr('Hello World','ll') from dual; |
2 数字函数
ROUND(x,d) 对x进行四舍五入,d来控制它的位数 |
ROUND(45.926, 2) 45.93 ROUND(45.926, 1) 45.9 ROUND(45.926, 0) 46 ROUND(45.926, -1) 50 ROUND(45.926, -2) 0 |
TRUNC (x,d) 将数字截尾取整 |
TRUNC(45.926, -1) 40 TRUNC(45.926, 1) 45.9 |
Mod(A,B) A%B |
3 通用函数
参数可以是任意数据类型 |
1 NVL过滤空值的函数 nvl(comm,0) |
2 nvl2(a,b,c) 当a=null时,返回c,否则返回b |
3 nullif(a,b) 当a=b时,返回null,否则返回a |
4 日期函数
日期的运算 1)日期加减一个数,此数指的是天;两个日期相加没有意义 2)日期相互减后的结果是相差的天数 可以通过加减来 近似的算出工龄 |
select sysdate from dual 10-11月-14 select sysdate-1 昨天,sysdate 今天,sysdate+1 明天 from dual select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss*ff') from dual; select (sysdate-hiredate)/30 一, MONTHS_BETWEEN(sysdate,hiredate) 二 from emp;
5 条件表达式
1 CASE表达式 SQL99的语法,类似BASIC |
语法: case column when exp then return_value end |
2 DECODE函数: oracle自己的语法,类似java
|
语法: DECODE(exp|column,search1,result1,....)
|
如:根据职位涨工资,总裁+1000,经理 800,其他 400
select ename,job,sal 涨前薪水, case job when 'PRESIDENT' then sal+1000 when 'MANAGER' then sal+800 else sal+400 end 涨后薪水 from emp; select ename,job,sal 涨前薪水, decode(job,'PRESIDENT',sal+1000, 'MANAGER', sal+800, sal+400) 涨后薪水 from emp;