oracle的单行函数以及多行函数(聚合函数、分组函数)的使用

来源:互联网 发布:免费oa软件 编辑:程序博客网 时间:2024/06/15 06:40

先介绍字符函数:
大小写相关:
1.

select lower('Hellow'), upper('heHHlo'), initcap('oello')from dual;--dual空表!

结果:

hellow  HEHHLO  Oello

和大小写无关:
1.

SELECT trim('H' from 'HellowHH'), ltrim('HellowHH', 'H'),ltrim('HHellowHH', 'HH'), rtrim('HellowHH', 'H')from dual;

注意trim 与 ltirm 和 rtrim用法有区别,函数的意思就是把‘H’删掉

ellow   ellowHH ellowHH Hellow

2.

select lpad(1000, 7, '*'), rpad(1000,7,'&')from dual;

就是lpad(1000,7,’‘);就是把1000的左边用‘’来补齐。
结果:***1000 1000&&&

3.连接字符串:

select concat('Hello', ' world')from dual;
Hello world

4.求子串

select substr('Hello worldlkasjdf', 3, 7)from dual;
llo wor

5.查找字符串的位置

select instr('hellow laksd', 'l')from dual;
3

6.replace替换字符串

select replace('hellow','h','mmm')from dual;

结果:

mmmellow

数学函数:
round()四舍五入。

select round(123.456,2),round(123.456,-2),round(123.45,0),round(123.45)from dual;

round(123.456,2),表示保留小数点后两位,若是-2的话,就是表示小数点前两位。

123.46  100 123 123

4.select trunc(1234.5678, 2)
from dual;

去除trunc()

1234.56

常见的日期函数:
1.可以直接在日期数据上加减数值,该数值表示日期前后的天数。
2.SYSDATE:获取当前的系统时间
3.MONTHS_BETWEEN:获取两个日期间的相差月数
4.ADD_MONTH:获取几个月后的日期
5.LAST_DAY:获取本月的左后一天的日期
6.EXTRACT:从本月中获取某一部分的值

1.sysdate()

select sysdate + 2from dual;

今天2015年10月18号

20-10月-15

2.add_months()

select add_months(sysdate, 4)from dual;
18-2月 -16

3.trunc 和 months_between的联合使用

select ename, trunc(months_between(sysdate, hiredate))from emp;

结果;

SMITH   418ALLEN   415WARD    415JONES   414MARTIN  408

5.extract()取出日期中的数据

select extract(year from sysdate),extract(month from sysdate),extract(day from sysdate)from dual;

结果:

2015    10  18

其他函数:
case 关键字:

select ename, deptno,sal,       case       when deptno=10 then sal + 100       when deptno=20 then sal + 200       when deptno=30 then sal + 300       ELSE sal end salaryfrom emp;

结果为:

SMITH   20  800 1000ALLEN   30  1600    1900WARD    30  1250    1550JONES   20  2975    3175MARTIN  30  1250    1550BLAKE   30  2850    3150CLARK   10  2450    2550SCOTT   20  3000    3200KING    10  5000    5100TURNER  30  1500    1800ADAMS   20  1100    1300JAMES   30  950 1250FORD    20  3000    3200

空值转换函数:
nal:(“no value?”)

select ename , deptno, comm, nvl(comm,0)from emp;

nvl(null,0);这里要求 两列的数值是相同的,因为此处comm是数值型,所以0是可以的,若是转换成字符串’0‘,那么第一个参数,就to_char(comm)了

SMITH   20      0ALLEN   30  300 300WARD    30  500 500JONES   20      0MARTIN  30  1400    1400BLAKE   30      0CLARK   10      0SCOTT   20      0KING    10      0TURNER  30  0   0ADAMS   20      0JAMES   30      0FORD    20      0MILLER  10      0
0 0