单行函数
字符串函数
将所有的姓名转换成小写
select LOWER(ename) from emp;
将所有的雇员姓名以首字母大写的形式保存
select ename,INITCAP(ename) from emp;
查询雇员姓名长度为5的全部雇员信息
select * from emp where LENGTH(ename)=5;
查询雇员姓名长度为5的全部雇员信息
select * from emp where LENGTH(ename)=5;
在JAVA程序中,字符串首字母的索引是0,但是在ORACLE里面,所有的字符串的首字母的索引都是1。如果设置了0,也是按照1的方式来处理。
要求截取每个雇员姓名的三个字母
select ename,SUBSTR(ename,1,3) from emp;
要求截取每个雇员姓名的后三个字母
select ename,LENGTH(ename)-3+1) from emp;
select ename,-3) from emp;
数值函数
ROUND()函数,四舍五入
select ROUND(789.567) from dual; //790
select ROUND(789.567,2) from dual; //789.57
select ROUND(789.567,-2) from dual; //800
TRUNC()函数,不会进位
select TRUNC(789.567),TRUNC(789.567,2),-2) from dual;//789,789.56,700
求模函数
select MOD(10,3) from dual;//1
日期函数
SYSDATE SYSTIMESTAMP两个伪列。
日期+数字:若干天后的日期
日期-数字:若干天前的日期
日期-日期:天数
查询每个雇员的编号、姓名、职位、已经被雇佣的天数
select empno,ename,job,SYSDATE-hiredate from emp;
如果直接使用天数来实现年或月的计算,是不准确的。ORACLE提供了四个日期处理函数
在当前日期下增加指定月份(4个月)
select ADD_MONTHS(SYSDATE,4) from dual;
计算每个雇员已经被雇佣的月数
select empno,hiredate,MONTHS_BETWEEN(SYSDATE,hiredate) from emp;
在当前时间所在月份的最后一天
select LAST_DAY(SYSDATE) from dual;
要求查询出所有在雇佣所在月倒数第三天雇佣的雇员信息
select * from emp where hiredate=LAST_DAY(hiredate)-2;
查询出下一个星期三
select next_day(SYSDATE,'星期三') from dual;
以年、月、日的方式计算出每个雇员到现在为止雇佣年限。
select empno,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) year,TRUNC(MOD(MONTHS_BETWEEN(SYSDATE,hiredate),12)) month,TRUNC(SYSDATE-ADD_MONTHS(hiredate,hiredate))) day from emp;
转换函数
函数名称 | 描述 |
---|---|
TO_CHAR() | 将日期或数字格式化为指定结构的字符串 |
TO_DATE() | 按照指定的转换格式编写字符串后将其变为日期型数据 |
TO_NUMBER() | 将字符串变为数字 |
TO_CHAR的转换格式:
- 日期:年(yyyy)、月(mm)、日(dd)
- 时间:时(hh、hh24)、分(mi)、秒(ss)
- 数字:任意数字(9)、本地货币符号(L)
将日期显示格式化
select to_char(SYSDATE,'yyyy-mm-dd hh24:mi:ss') from dual;
实现日期数据的拆分
select to_char(SYSDATE,'yyyy'),to_char(SYSDATE,'mm'),'dd') from dual;
要求查询出2月份雇佣的雇员
select * from emp where to_char(hiredate,'mm')='02';
select * from emp where to_char(hiredate,'mm')=2;
//ORACLE之中提供自动转型
拆分数字
select TO_CHAR(894651651,'L999,999,999') from dual;
将字符串变为日期
select TO_DATE('1993-03-23','yyyy-mm-dd') from dual;
将字符串变为数字,没有用。ORACLE提供了自动转换机制。
select TO_NUMBER('1') + TO_NUMBER('2') from dual;
通用函数
函数名称 | 描述 |
---|---|
NVL() | 如果传入的内容是null,则使用默认数值处理,如果不是空则使用原始数值处理 |
DECODE() | 设置的内容会与每一个比较内容进行比较,如果内容相同,则会使用显示内容进行输出,如果都不相同,则使用最后的默认内容输出 |
处理null函数
查询每个雇员的编号、姓名、基本工资、佣金、年薪
select empno,sal,comm,(sal+comm)*12 from emp;
由于很多人的comm为null所以得到的年薪也是null。所以为了保证计算的准确性,需要将null替换成0。
select empno,NVL(comm,0),(sal+NVL(comm,0))*12 from emp;
select ename,decode(job,'CLERK','办事员','SALESMAN','销售','MANAGER','经理','ANALYST','分析人员','PRESIDENT','总裁') from emp;