【Oracle】单行函数

  1. 字符函数

Aupper(转大写)

selectUpper('abcde')from dual;

SELECT *FROM empWHERE ename=UPPER('smith');

BLower(转小写)

SELECTlower('ABCD')FROM dual;

CInitcap(首字母大写)

SELECTinitcap(ename)from emp;

DConcat(字符连接函数,等同于||

SELECTconcat('a','b')FROM dual;

SELECT'a'||'b'from dual;

ESubstr(求母串中的某个子串)

SELECTsubstr('abcde',length('abcde')-2)from dual;

FLength(字符数)

SELECTlength(ename)from emp;

注意:lengthb:字节数

GReplace(字符串替换函数

selectreplace('Hello Wordl','l','*')from dual;

SELECTreplace(ename,'SMITH','A')from emp;

说明:将原字符串替换为新字符串

HInstr(在母查中查找子串的位置)

SELECTinstr('Hello World','or')from dual;

ILpad(左侧填充)

lpad('SMITH',10,'*')

左侧填充:

(10-smith的长度)

JRpad(右侧填充)

rpad('SMITH',10,'*')右侧填充

KTrim(去掉字符串前后指定的字符)

selecttrim('H'from'HelloWorldH')from dual;

trim( helloworld ’);过滤首尾空格

  1. 数值函数

ARound(四舍五入)

selectround(412,-2)from dual;

selectround(412.313,2)from dual;

BMod(求余)

select mod(1600,300)from dual;

CTrunc(截断)

SELECTtrunc(412.13,-2)from dual;

  1. 日期函数

AMonths_between()(两个日期相差的月数)

select months_between(sysdate,hiredate)from emp;

BAdd_months()(在指定日期上加上若干个月)

select add_months(sysdate,1)from dual;

CNext_day()

select next_day(sysdate,’星期一’) from dual;

DLast_day(某个日期当月的最后一天

select last_day(sysdate) fromdual;

练习

    1. 显示当前日期

select sysdatefrom dual;

    1. 显示时间部分

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')from dual;

    1. 显示昨天,今天和明天,加减数字仍未日期

selectsysdate-1昨天,sysdate今天,sysdate+1明天from dual;

    1. 两个日期相减,结果为相差的天数,查询员工信息,显示员工工龄。两个日期不能相加

selectempno,ename,sysdate-hiredatefromemp;

    1. 查询员工信息,显示员工工龄,分别按照天,星期,月显示

selectempno,sysdate-hiredate,(sysdate-hiredate)/7星期,(sysdate-hiredate)/30fromemp;

    1. months_between:两个日期相差的月数

select (sysdate-hiredate)/30方式一,months_between(sysdate,hiredate)方式二from emp;

    1. add_months:在指定日期上加上若干个月

selectadd_months(sysdate,1)下个月,add_months(sysdate,123)"123个月后"from dual

    1. last_day:某个日期当月的最后一天

select last_day(sysdate)from dual;

    1. next_day:下周六

selectnext_day(sysdate,'星期五')from dual;

    1. 对日期进行四舍五入

selectround(sysdate,'MONTH'),round(sysdate,'YEAR')from dual;

    1. 对日期进行截断

selecttrunc(sysdate,trunc(sysdate,'YEAR')fromdual;

    1. 日期格式

select * from empwhere hiredate=to_date('1982-01-23','yyyy-mm-dd');

    1. 查询当前日期:显示: 2011-09-17 15:12:15今天是星期六

selectto_char(sysdate,'yyyy-mm-dd hh24:mi:ss"今天是"day')from dual;

    1. 查询员工信息,显示员工的编号,姓名,月薪,要求有货币代码(L),千位符(,),小数点(.)

select empno,to_char(sal,'L9,999.99')from emp;





4.转换函数

ATo_char

select to_char(sysdate,’yyyy’) from dual;

selectto_char(sysdate,’fmyyyy-mm-dd’) from dual;

selectto_char(sal,’L999,999,999’)from emp;

selectto_char(sysdate,’D’) from dual;//返回星期

BTo_number

select to_number(‘13’)+ to_number(‘14’) from dual;

CTo_date

select to_date(‘20090219’,’yyyyMMdd’) from dual;


5.通用函数

ANVL()函数

select nvl(comm,0) from emp;

BNULLIF()函数

如果表达式exp1exp2的值相等则返回null,否则返回exp1的值

CNVL2()函数

select empno,sal,comm,nvl2(comm,sal+ comm,sal ) totalfrom emp;

DCOALESCE()函数

依次考察各参数表达式,遇到非null值即停止并返回该值

selectempno,coalesce(sal + comm,0)总收入 from emp;

ECASE表达式

select empno,

case deptno

when10 then ‘财务部’

when20 then ‘研发部’

when30 then ‘销售部’

else‘未知部门’

end部门

from emp;

FDECODE()函数

case表达式类似,decode()函数也用于实现多路分支结构

select empno,

decode(deptno,10,‘财务部’,

20,’研发部’,

30,’销售部’,

未知部门’)

部门

from emp ;

练习:

    1. 找出每个月倒数第三天受雇的员工

select * from empwhere last_day(hiredate) – 2 =hiredate;

    1. 找出25年前雇的员工

select * from empwherehiredate<=add_months(sysdate,-25*12);

    1. 所有员工名字前加上Dear,并且名字首字母大写

select ‘Dear’ || initcap(ename) fromemp;

    1. 找出姓名为5个字母的员工

select * from empwhere length(ename) = 5;

    1. 找出姓名中不带R这个字母的员工

select * from emp whereename not like ‘%R%’;

    1. 显示所有员工的姓名的第一个字

select substr(ename,1) fromemp;

    1. 显示所有员工,按名字降序排列,若相同,则按工资升序排序

select * from emp order byname desc,salary asc;

假设一个月为 30 天,找出所有员工的日薪,不计小数

select empno,round((nvl(sal,0)+nvl(comm,0))/30)from emp;

9.找到2月份受雇的员工

select * from empwhere to_char(hiredate,‘fmmm’)= ‘2’;

10.列出员工加入公司的天数(四舍五入)

select t.*,round(sysdate-t.hiredate) from emp t

11.分别用casedecode函数列出员工所在的部门,deptno=10显示’部门10’,deptno=20显示’部门20’,deptno=30显示’部门30’,deptno=40显示’部门40’否则为’其他部门’

select ename,

case deptno

when 10 then

'部门10'

when 20 then

'部门20'

when 30 then

'部门30'

when 40 then

'部门40'

else

'其他部门'

end工资情况

from scott.emp

select ename,

decode(deptno,

10,

'部门10',

20,

'部门20',

30,

'部门30',

40,

'部门40',

'其他部门')工资情况

from scott.emp

相关文章

数据库版本:11.2.0.4 RAC(1)问题现象从EM里面可以看到,在23号早上8:45~8:55时,数据库等待会话暴增...
(一)问题背景最近在对一个大约200万行数据的表查看执行计划时,发现存在异常,理论上应该返回100多万...
(一)删除备份--DELETE命令用于删除RMAN备份记录及相应的物理文件。当使用RMAN执行备份操作时,会在RM...
(1)DRA介绍 数据恢复顾问(Data Recovery Advise)是一个诊断和修复数据库的工具,DRA能够修复数据文...
RMAN(Recovery Manager)是Oracle恢复管理器的简称,是集数据库备份(backup)、修复(restore)和恢复...
(1)备份对象 可以使用RMAN进行的备份对象如下: --整个数据库:备份所有的数据文件和控制文件; --数...