一、字符函数:(接收字符的输入并返回字符或数字)
1、lower()函数:(此函数将全部的大写字母都可以变为小写字母)
SELECT lower('ABCDE') FROM dual ; dual是一张虚拟表
2、upper()函数:(将输入的字符串变为大写字母)
SELECT upper('abcd') FROM dual ;
例如:之前查询的时候区分大小写,所以此处如果输入的是小写字母,就可以通过upper函数进行转换。
查询雇员姓名内容为smith的全部员工。
SELECT * FROM emp WHERE ename=UPPER('smith')
查询雇员姓名内容为smith的全部员工。
SELECT * FROM emp WHERE ename=UPPER('smith')
3、initcap()函数:(将每个字符串的首字母大写)
例如:要求将雇员表中的全部雇员信息的首字母大写。
SELECT initcap(lower(ename)) FROM emp ;
函数可以进行嵌套。
例如:要求将雇员表中的全部雇员信息的首字母大写。
SELECT initcap(lower(ename)) FROM emp ;
函数可以进行嵌套。
4、concat()函数:(字符串连接,可以连接两个字符串)
SELECT concat('hello',' world!!!') FROM dual ;
实际上使用“||”也可以完成两个字符串的连接操作。
SELECT concat('hello',' world!!!') FROM dual ;
实际上使用“||”也可以完成两个字符串的连接操作。
5、substr()函数:(字符串截取)
截取的时候需要注意:要从那里开始截取,之后取多长的长度。
SELECT substr('hello',1,2) FROM dual ;
截取的时候需要注意:要从那里开始截取,之后取多长的长度。
SELECT substr('hello',1,2) FROM dual ;
同时也可以取负数,表示从尾倒着取。
SELECT substr('hello',-3,2)FROM dual 倒数第三个开始取两位
SELECT substr('hello',-3,2)FROM dual 倒数第三个开始取两位
注意:substr函数的开始点是从1或0开始的,oracle非常智能。
6、length():取出字符串的长度,例如,取出每一个雇员的姓名的长度:
SELECT ename||' 姓名的长度为:'||length(ename) FROM emp ;
SELECT ename||' 姓名的长度为:'||length(ename) FROM emp ;
7、instr()函数:查找在一个字符串中是否有指定的字符串,如果有,则返回其位置
SELECT instr('hello','x') FROM dual ;
如果有此字符串,则返回位置,如果没有,则返回0。
SELECT instr('hello','x') FROM dual ;
如果有此字符串,则返回位置,如果没有,则返回0。
8、replace()函数:替换,可以将一个字符串中的指定字符串替换为其他内容:
SELECT replace('hello','l','x') FROM dual ;
SELECT replace('hello','l','x') FROM dual ;
9、trim()函数:去掉左右空格的函数
SELECT trim(' hello ') FROM dual ;
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、 检索姓名最后一个字母为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(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
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
• SELECT TRUNC(34.56,-1) FROM dual ; 结果:30
3、MOD()函数:(取余数,即取模)
•SELECT MOD(10,3) FROM dual ; 结果:1
•SELECT MOD(10,3) FROM dual ; 结果:1
三、日期函数:
1、在Oracle中可以通过查询sysdate取得当前的日期:
• SELECT sysdate FROM dual ;
• SELECT sysdate FROM dual ;
日期-数字=日期;日期+数字=日期;日期-日期=数字(多少天)
2、例如:计算10部门中的员工进入公司的周数:
肯定使用当前日期-雇佣日期(hiredate) = 天数,天数/7为日期数。
SELECT ename,round((sysdate-hiredate)/7) from emp ;
3、months_between()函数:给出指定日期范围的月数
肯定使用当前日期-雇佣日期(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 ;
SELECT ADD_MONTHS(sysdate,3) FROM dual ;
5、NEXT_DAY():表示下一个今天(星期几)
SELECT NEXT_DAY(sysdate,'星期一') FROM dual ; 表示下一个星期一是多少号
SELECT NEXT_DAY(sysdate,'星期一') FROM dual ; 表示下一个星期一是多少号
6、LAST_DAY:求出当前日期所在月的最后一天:
SELECT LAST_DAY(sysdate) FROM dual ; 表示本月的最后一天的日期
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()函数:转换成数字
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,'测试用');
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!
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20670907/viewspace-732802/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/20670907/viewspace-732802/