oracle中的函数
引用文档:http://hi.baidu.com/faith_55/item/cbbaf31817ff166a3f87ce8c
一、字符函数:(接收字符的输入并返回字符或数字)
1、lower()函数:(此函数将全部的大写字母都可以变为小写字母)
SELECTlower('ABCDE')FROMdual;dual是一张虚拟表
2、upper()函数:(将输入的字符串变为大写字母)
SELECTupper('abcd')FROMdual;
例如:之前查询的时候区分大小写,所以此处如果输入的是小写字母,就可以通过upper函数进行转换。
查询雇员姓名内容为smith的全部员工。
SELECT*FROMempWHEREename=UPPER('smith')3、initcap()函数:(将每个字符串的首字母大写)
例如:要求将雇员表中的全部雇员信息的首字母大写。
SELECTinitcap(lower(ename))FROMemp;
函数可以进行嵌套。4、concat()函数:(字符串连接,可以连接两个字符串)
SELECTconcat('hello','world!!!')FROMdual;
实际上使用“||”也可以完成两个字符串的连接操作。5、substr()函数:(字符串截取)
截取的时候需要注意:要从那里开始截取,之后取多长的长度。
SELECTsubstr('hello',1,2)FROMdual;同时也可以取负数,表示从尾倒着取。
SELECTsubstr('hello',-3,2)FROMdual倒数第三个开始取两位注意:substr函数的开始点是从1或0开始的,oracle非常智能。6、length():取出字符串的长度,例如,取出每一个雇员的姓名的长度:
SELECTename||'姓名的长度为:'||length(ename)FROMemp;7、instr()函数:查找在一个字符串中是否有指定的字符串,如果有,则返回其位置
SELECTinstr('hello','x')FROMdual;
如果有此字符串,则返回位置,如果没有,则返回0。8、replace()函数:替换,可以将一个字符串中的指定字符串替换为其他内容:
SELECTreplace('hello','l','x')FROMdual;9、trim()函数:去掉左右空格的函数
SELECTtrim('hello')FROMdual;查询:
1、检索姓名最后一个字母为N的雇员
•SELECT*FROMempWHEREsubstr(ename,-1,1)='N';
2、检索职务为“SALE”的全部员工信息
•SELECT*FROMempWHEREsubstr(job,1,4)='SALE';二、数值函数:(接收数值并返回数值)1、ROUND()函数:(表示四舍五入)•SELECTROUND(34.56)FROMdual;结果:35
•SELECTROUND(34.56,-1)FROMdual;结果:30•SELECTROUND(35.56,-1)FROMdual;结果:40•SELECTROUND(34.56,1)FROMdual;结果:35.6
2、TRUNC()函数:(表示截取函数,不会保留任何小数且不会执行四舍五入的操作)
•SELECTTRUNC(34.56)FROMdual;结果:34•SELECTTRUNC(34.56,1)FROMdual;结果:34.5
•SELECTTRUNC(34.56,-1)FROMdual;结果:303、MOD()函数:(取余数,即取模)
•SELECTMOD(10,3)FROMdual;结果:1三、日期函数:1、在Oracle中可以通过查询sysdate取得当前的日期:
•SELECTsysdateFROMdual;日期-数字=日期;日期+数字=日期;日期-日期=数字(多少天)2、例如:计算10部门中的员工进入公司的周数:
肯定使用当前日期-雇佣日期(hiredate)=天数,天数/7为日期数。
SELECTename,round((sysdate-hiredate)/7)fromemp;
3、months_between()函数:给出指定日期范围的月数求出所有员工的受雇月数:months_between,使用当前日期与雇佣日期比较。SELECTename,round(MONTHS_BETWEEN(sysdate,hiredate))fromemp;4、add_months()函数:在指定的日期上加上指定的月数,求出之后的日期求出,三个月之后的日期是那一天:
SELECTADD_MONTHS(sysdate,3)FROMdual;5、NEXT_DAY():表示下一个今天(星期几)
SELECTNEXT_DAY(sysdate,'星期一')FROMdual;表示下一个星期一是多少号6、LAST_DAY:求出当前日期所在月的最后一天:
SELECTLAST_DAY(sysdate)FROMdual;表示本月的最后一天的日期四、转化函数(重点)1、to_char()函数:转换成字符串拆分年月日,例如:.selectempo,empname,to_char(hiredate,'yyyy')year,to_char(hiredate,'mm')months,to_char(hiredate,'dd')dayfromemp;.selectempo,to_char(hiredate,'fmyyyy-mm-dd')fromemp(fm代表可以去除0).selectempl,to_char(sal,'$99,999')fromemp;(9表示1位数字,如果是本地货币则用L表示)2、to_number()函数:转换成数字selectto_number('123')+to_number('321,)fromdual(字符串转为数字进行相加)3、to_date()函数:转换成日期selectto_date('2011-01-01','yyyy-mm-dd')fromdual;五、通用函数:(重点)1、NVL()函数:将一个指空值变为一个指定的内容selectempo,ename,NVL(comm,0),(sal+NVL(comm,0))*12incomefromemp;如果奖金为空则按零显示再进行计算。2、decode函数:类似于IFELSEIFELSE语句selectdecode(1,1,'内容为1',2,'内容为2',3,'内容为3')fromdual;如果给出的值为1,那么则显示内容为1,为2则显示内容为2……再例如如果工作为销售则显示销售员、若为业务员则显示业务员、若为总裁则显示总裁selectdecode(job,'salseman','销售员','clerk','业务员','president','总裁')fromemp!