您的位置:首页 > 数据库 > Oracle

Oracle单组函数

2015-12-01 12:16 453 查看

--Upper -------把字符转换成大写

SELECT Upper ('abcde') FROM dual ;

--Lower ----- 把字符转换成小写
SELECT lower('ABCDE') FROM dual ;

--Initcap -----返回所有单词的首字母大写,其他字母小写
Select initcap(ename) from emp;

--Concat -----字符串连接 ,相当于||
Select concat('a','b') from dual;
Select 'a' || 'b' from dual;

--Substr -------查找字符串
Select substr('abcde',length('abcde')-2) from dual;
Select substr('abcde',-3,3) from dual;

substr(string,position,substring_length)

1、如果position=0, 则被当做1

2、如果position>1, 则从position位置开始找

3、如果position<1, 则从结尾开始找

4、如果第三个位置没有指定,则从指定位置到结尾

--Length ------字符串的长度
Select length(dname) from dept;

--Replace -----字符串替换 Select replace(ename,'a','A') from emp;

--Instr -- -----字符串查找,返回索引值
Select instr('Hello World','or') from dual; --8 indexof

--Lpad ------左侧填充
select lpad('Smith',10,'*') from dual--左侧填充 *****Smith

--Rpad ------右侧填充
select rpad('Smith',10,'*') from dual--右侧填充 Smith*****

--Trim -------过滤首位空格
select trim(' Mr Smith ') from dual --过滤首尾空格 Mr Smith

--数值函数

--Round -----四舍五入,取精度
select round(462,-2) from dual; ------负数往小数点前数 ----500
select round(412.313,2) from dual; -----正数往小数点后数 ----412.13

--Trunc -----不四舍五入,直接取最大值
select trunc(462.13,-2) from dual; ----400

--日期函数
--Months_between() -----两个时间之间隔了多少个月
select months_between(sysdate,hiredate) from emp;

--Add_months() ------在某个时间点上加一个月
select add_months(sysdate,1) from dual;

--Next_day()
select next_day(sysdate,'星期一') from dual; ----返回下一个星期一的日期

--Last_day
select last_day(sysdate) from dual; ----返回这个月的最后一天

--转换函数

--To_char
select to_char(sysdate,'yyyy') from dual; ---2011
select to_char(sysdate,'yyyy-mm-dd') from dual; ----2011-07-16
select to_char(sal,'L999,999,999') from emp; ----
select to_char(sysdate,'D') from dual; --返回星期 ----7

--To_number
select to_number('13')+to_number('14') from dual; ------27

--To_date
Select to_date('2009-02-10','yyyy-MM-dd') from dual; ----2009/2/10

select to_char('001') from dual; ----001
select to_number('003')from dual; -----3

--通用函数
--NVL()函数 -----有值返回本身,无值返回0

select nvl(comm,0) from emp;

--NULLIF()函数 ----如果表达式 exp1 与exp2 的值相等则返回 null,否则返回 exp1 的值

nullif(exp1,exp2)

--NVL2()函数
select empno, ename, sal, comm, nvl2(comm, sal+comm, sal) total from emp; ----如果comm不为null,返回sal+comm,否则返回comm

--COALESCE()函数 --依次考察各参数表达式,遇到非null值即停止并返 回该值。

select empno, ename, sal, comm, coalesce(sal+comm, sal, 0)总收入 from emp;

--CASE表达式
select empno, ename, sal,
case deptno
when 10 then '财务部'
when 20 then '研发部'
when 30 then '销售部'
else '未知部门'
end 部门
from emp;

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

select empno, ename, sal,
decode(deptno, 10, '财务部',
20, '研发部',
30, '销售部',
'未知部门')
部门
from emp;

case在SQL中有两种写法,先建立一个表
create table salgrade(grade int, sal int);

insert into salgrade values(1,1000);
insert into salgrade values(2,2000);
insert into salgrade values(3,3000);

第一种写法,简单写法:
select grade,sal,
case grade
when 1 then 'low'
when 2 then 'middle'
else 'high'
end
from salgrade;

第二种写法,查找写法:
SELECT grade,sal,
case when sal <=1000 then 'low'
when sal <=2000 then 'middle'
else 'high'
end
FROM salgrade;

decode只能代替第一种写法:
select grade,sal,decode(grade,1,'low',2,'middle','high') from salgrade;

--单行函数嵌套
select empno, lpad(initcap(trim(ename)),10,' ') name, job, sal from emp;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: