3、initcap()函数:(将每个字符串的首字母大写)
例如:要求将雇员表中的全部雇员信息的首字母大写。
SELECT
initcap(lower(ename)) FROM emp
;
函数可以进行嵌套。
4、concat()函数:(字符串连接,可以连接两个字符串)
SELECT
concat('hello',' world!!!') FROM dual
;
实际上使用“||”也可以完成两个字符串的连接操作。
5、substr()函数:(字符串截取)
截取的时候需要注意:要从那里开始截取,之后取多长的长度。
SELECT
substr('hello',1,2) FROM dual ;
同时也可以取负数,表示从尾倒着取。
SELECT substr('hello',-3,2)FROM dual 倒数第三个开始取两位
注意:substr函数的开始点是从1或0开始的,oracle非常智能。
6、length():取出字符串的长度,例如,取出每一个雇员的姓名的长度:
SELECT
ename||' 姓名的长度为:'||length(ename) FROM emp ;
7、instr()函数:查找在一个字符串中是否有指定的字符串,如果有,则返回其位置
SELECT
instr('hello','x') FROM dual
;
如果有此字符串,则返回位置,如果没有,则返回0。
8、replace()函数:替换,可以将一个字符串中的指定字符串替换为其他内容:
SELECT
replace('hello','l','x') FROM dual ;
9、trim()函数:去掉左右空格的函数
SELECT
trim(' hello ')
FROM dual ;
查询:
1、 检索姓名最后一个字母为N的雇员
•
SELECT * FROM emp WHERE
substr(ename,-1,1)='N';
2、 检索职务为“SALE”的全部员工信息
•
SELECT * FROM emp WHERE substr(job,1,4)='SALE';
二、数值函数:(接收数值并返回数值)
1、ROUND()函数:(表示四舍五入)
•SELECT
ROUND(34.56) FROM dual
; 结果:35
•SELECT
ROUND(34.56,-1) FROM dual ; 结果:30
•SELECT
ROUND(35.56,-1) FROM dual ; 结果:40
•SELECT
ROUND(34.56,1) FROM dual
; 结果:35.6
2、TRUNC()函数:(表示截取函数,不会保留任何小数且不会执行四舍五入的操作)
•
SELECT TRUNC(34.56) FROM dual
; 结果:34
• SELECT
TRUNC(34.56,1) FROM dual
; 结果:34.5
•
SELECT TRUNC(34.56,-1) FROM dual ; 结果:30
3、MOD()函数:(取余数,即取模)
•SELECT
MOD(10,3) FROM dual
; 结果:1
三、日期函数:
1、在Oracle中可以通过查询sysdate取得当前的日期:
•
SELECT sysdate FROM dual ;
日期-数字=日期;日期+数字=日期;日期-日期=数字(多少天)
2、例如:计算10部门中的员工进入公司的周数:
肯定使用当前日期-雇佣日期(hiredate)
=
天数,天数/7为日期数。
SELECT
ename,round((sysdate-hiredate)/7) from emp
;
3、months_between()函数:给出指定日期范围的月数
求出所有员工的受雇月数:months_between,使用当前日期与雇佣日期比较。
SELECT
ename,round(MONTHS_BETWEEN(sysdate,hiredate)) from emp ;
4、add_months()函数:在指定的日期上加上指定的月数,求出之后的日期
求出,三个月之后的日期是那一天:
SELECT
ADD_MONTHS(sysdate,3) FROM dual ;
5、NEXT_DAY():表示下一个今天(星期几)
SELECT
NEXT_DAY(sysdate,'星期一') FROM dual
; 表示下一个星期一是多少号
6、LAST_DAY:求出当前日期所在月的最后一天:
SELECT
LAST_DAY(sysdate) FROM dual
; 表示本月的最后一天的日期
四、转化函数(重点)
1、to_char()函数:转换成字符串
拆分年月日,例如:
.select
empo,empname,to_char(hiredate,'yyyy')
year,to_char(hiredate,'mm')months,to_char (hiredate,'dd')
day from emp;
.select
empo,to_char(hiredate,'fmyyyy-mm-dd') from emp ( fm代表可以去除0)
.select
empl,to_char(sal ,'$99,999') from
emp; (9表示1位数字,如果是本地货币则用L表示)
.select * from sut
where to_char(stu,'yyyymmdd hh24:mi:ss')='20120520
13:20:20';
2、to_number()函数:转换成数字
select
to_number('123')+to_number('321,) from dual (字符串转为数字进行相加)
3、to_date()函数:转换成日期
select
to_date('2011-01-01','yyyy-mm-dd') from
dual;
insert into t_contact_group
values(contactGroup_seq.Nextval,'M',to_date('2012-05-20 12:00:00','yyyy-mm-dd
hh24:mi:ss'),1,'测试用');
五、通用函数:(重点)
1、NVL()函数:将一个指空值变为一个指定的内容
select
empo,ename,NVL(comm,0),(sal+NVL(comm,0))*12 income from emp;
如果奖金为空则按零显示再进行计算。
2、decode函数:类似于IF ELSE IF ELSE
语句
select
decode(1,1,'内容为1',2,'内容为2',3,'内容为3') from dual;
如果给出的值为1,那么则显示内容为1
,为2则显示内容为2……
再例如如果工作为销售则显示销售员、若为业务员则显示业务员、若为总裁则显示总裁
select
decode(job,'salseman','销售员','clerk','业务员','president','总裁') from
emp!