所有的单行函数
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
要求显示所有雇员的姓名以及姓名的后三个字符
方法1:select ename,SUBSTR(ename,LENGTH(ename)-2) FROM emp;:
方法2:select ename ,SUBSTR(ename,-3,3); //从倒数第三个开始取三个
数值函数:对数字进行操作
日期 + 数字 = 日期
日期 - 日期 = 数字(天数) //这里和java中不同,Java是得到毫秒数
显示10部门雇员进入公司的星期数
1。先获得当前时间:select sysdate from dual
2.求星期数: (当前日期 - 雇佣日期)/7 = 星期数
找出各月倒数第三天受雇的所有员工:
select empno from emp where LAST_DAY(hiredate)-2 = hiredate;
LAST_DAY(hiredate)意思是各月的倒数第一天,如果LAST_DAY(hiredate)-1显然是倒数第二天,那么LAST_DAY(hiredate)-2显然是倒数第三天
显示所有员工的前三个字符:
select SUBSTR(ename,0,3) from emp ;
----------------------------------------------------------------------
2.日期函数:
规律:
日期 - 数字 = 日期
select empno,ename,(SYSDATE - hiredate)/7 from emp; //不过这里求出来的日期是有小数点的哈
改进: select empno,ename,ROUND((SYSDATE - hiredate)/7) from emp;
select empno,ename,MONTHS_BETWEEN(sysdate,hiredate) from emp;
select ename,TO_CHAR(hiredate,'yyyy') year ,TO_CHAR(hiredate,'mm') mon
from empБайду номын сангаас
order by mon desc,year ;
显示在一个月为30天的情况所有员工的日薪,忽略余数
select ename,ROUND(sal/30) from emp; //注意题目的表达,一个月为30天的情况的意思是每个月都假设只有三十天
MOD();
select MOD(10,3) FROM dual; //10除以3的余数....结果为1
显示正好为5个字符的员工的姓名:
select ename from emp where LENGTH(ename) = 5;
显示不带R的员工的姓名:
select ename from emp where ename NOT LIKE '%R%';
MOD(BETWEEN_AND(SYSDATE,hiredate),12) month,
TRUNC(MOD((SYSDATE-hiredate),30)) day
from emp;
--------------------------------------------------------------------------
4.通用函数:
求雇员年薪:
select empno,ename,(sal+comm)*12 from emp; //这样求出来的年薪有些是空值,原因是有些雇员的奖金是NULL,NULL经计算之后结果还是NULL
使用NVL()函数:可以将一个空值变成指定的内容 , Null to value,也就是使null有值
显示每个员工加入公司的天数
select ename,ROUNC((hiredate - SYSDATE)) date from emp;
以年月日的方式显示所有员工的服务年限,注意:因为有闰年存在,所以天数只能大概求出来
select BETWEEN_AND(SYSDATE,hiredate)*12 year,
找出在二月受聘的员工:
select * from emp where TO_CHAR(hiredate,'mm') = 2; //注意TO_CHAR虽然是把日期转换成字符串,但是在oracle中 如果一个字符串和一个numbe比较,那么这个字符串会自动去掉前导0,然后再转换成number类型。。。。
select TO_CHAR(sal,'L99,999') from emp; //L表示Local,会以本地字符集显示
TO_NUMBER();//是将 字符串 变成数字的一种函数
select TO_NUMBER('123') + TO_NUMBER('123') from dual;
TO_DATE();//将 字符串 变成date类型
select TO_DATE('2009-02-16','yyyy-mm-dd') from dual; //又因为是显示,那么他会自动调用默认to_char转换为默认格式
---------------------------------------------------------------------
3.转换函数:
select hiredate from emp; //这个查出来的日期是这种样子的字符串,他会调用一个默认的to_char :12-12月-01
TO_CHAR();//把日期或者数字转换成字符串
select TO_CHAR(hiredate,'yyyy年mm月dd日') from emp;//结果为1986年05月06日 ,注意月和日前面都有前导0
TRUNC(): 这个函数不会保留任何小数,而且小数点也不会执行四舍五入的操作
select TRUNC(789.536) FROM dual; //结果是789
select TRUNC(789.536,2) FROM dual; //结果是789.53
select TRUNC(789.536,-2) FROM dual; //结果是800
select empno,ename,(sal+NVL(comm,0))*12 from emp;
DECODE(1,1,'内容是1',2,'内容是2',3,'内容是3'); //相当于switch(1){
case 1 : '内容是1';break;
oracle-----单行函数
Oracle是对大小写敏感的。。。。
Oracle中的单行函数
1.字符函数:对字符进行操作
select UPPER('smith') from dual;
select * from emp where ename = UPPER('smith');
LOWER('SMitH') ;//变成小写
INITCAP("ddd") ;//第一个字母大写,其他字母小写
SUNSTR(‘hello’,1,3) //字符串截取,注意,SUNSTR(‘hello’,0,3);这两个函数效果一样,因为Oracle认为0和1都是头一个字母
LENGTH('HELLO') ;// 字符串长度
replace('hello','l','x');//这里相当于java中的relpaceAll,结果是hexxo
执行四舍五入: select ROUND(789.536) from dual; //结果为790
select ROUND(789.536,2) from dual //结果为789.54,保留两位小数
select ROUND(789.536,-2) from dual; //结果为800,因为789中9的位置是-1,8的位置是-2,而8又可以进位,所以是800
} 我们可以把这个函数理解为 把第一个表达式解码成我们需要的内容
select empno ,DECODE(job,'CLEAR','业务员','SALESMAN','销售人员');
case 2 : ' 内容是2';break;
case 3 :'内容是3';break;
求出工作了7年以上的员工
select * from emp where MONTH_BETWEEN(SYSDATE,hiredate)/12 > 7;
求出受雇员工的年份和月份,按照雇用日期所在月由大到小排序,如果月份相同则将最早年份排在前面。
明确的是: order by 可以对字符串排序
select TO_CHAR(hiredate,'fmyyyy年mm月dd日') from emp; //在前面加上fm,则会去掉前导0
select TO_CHAR(sal,'99,999') from emp; //其中9代表一位数字,那么这样表示出来的金额就会以,分隔了
select TO_CHAR(sal,'$99,999') from emp; //结果前面加上了一个$符号 ,如 $23,783
select ADD_MONTHS(SYSDATE,4) from dual; //在当前时间上加入4个月
求当前日期的下一个星期一是几月几号,如果明天是星期一,那么求出来的日期是明天
select NEXT_DAY(SYSDATE,'星期一') FROM dual;
求出本月的最后一天:
select LAST_DAY(SYSDATE) from dual; //这个函数也就是在当前日期上加上一些天数,不齐到最后一天