所谓的单行函数指的就是完成某一具体功能的操作函数,例如:转大写或日期格式的转换等等。
格式:”返回值 函数名称(参数)“。
按类型分为:字符串函数、数值函数、日期函数、转换函数、通用函数。
字符串函数:
1. 字符串 UPPER(列 | 字符串) 将传入的字符串变为大写字母形式;
2. 字符串 LOWER(列 | 字符串) 将传入的字符串变为小写字母形式;
3. 字符串 INITCAP(列 | 字符串) 开头首字母大写,其他字母全变为小写;
4. 数字 LENGTH(列 | 字符串) 取得指定字符串的长度;
5. 字符串 SUBSTR(列 | 字符串,开始索引,[长度]) 进行字符串的截取,如未设定长度,则从开始索引一直截取到结尾;
6. 字符串 REPLACE(列 | 字符串,旧内容,新内容) 将指定字符串的数据由旧数据替换为新数据。
示意:
select upper('hello') from dual; //HELLO
select lower(ename) from emp;
select * from emp where ename=upper('&inputname');
select ename,initcap(ename) from emp;
select * from emp where length(ename)=5;
select substr('helloworld',6) from dual; //world
select substr('helloworld',0,5) from dual; //hello
select ename,substr(ename,length(ename)-2) from emp; //后三位
select ename,substr(ename,-3) from emp; //后三位(只有Oracle数据库才有)
数值函数:
1. 数字 ROUND(列 | 数字 [,小数位]) 实现数据的四舍五入;
2. 数字 TRUNC(列 | 数字 [,小数位]) 实现数据的截取,即不进位;
3. 数字 MOD(列 | 数字 ,列 | 数字 ) 求模(计算余数);
示意:
select round(157.5616) from dual; //158
select round(157.5616,2) from dual; //157.56
select round(157.5616,-2) from dual; //200
select trunc(157.5616) from dual; //157
select trunc(157.5616,1) from dual; //157.5
select mod(10,3) from dual; //1
日期函数:
进行日期操作,必须知道当前日期是什么;伪列:SYSDATE;
有三个操作公式:
·日期+数字=日期(若干天之后的日期);
·日期-数字=日期(若干天之前的日期);
·日期-日期=数字(天数);
示例:
select sysdate-7,sysdate+120 from dual;
有四个日期处理函数:
1. 日期 ADD_MONTHS(列 | 日期,月数) 在指定的日期上增加若干个之后的日期;
2. 数字 MONTHS_BETWEEN(列 | 日期,列 | 日期) 返回两个日期之间的所经历的月数;
3. 日期 LAST_DAY(列 | 日期) 取得指定日期所在月数的最后一天;
4. 日期 NEXT_DAY(列 | 日期,'星期X') 返回下一个指定的一周时间数对应的日期。
示例:
select add_months(sysdate,5) from dual;
select empno,ename,hiredate,months_between(sysdate,hiredate) from emp;
select * from emp where last_day(hiredate)-2 from emp;
select * from emp where hiredate=last_day(hiredate)-2;
select next_day(sysdate,'星期二') from dual;
select empno,ename,hiredate,trunc(months_between(sysdate,hiredate)/12) year from emp; //年
select empno,ename,hiredate,trunc(months_between(sysdate,hiredate)/12) year,trunc(mod(months_between(sysdate,hiredate),12)) months from emp; //年、月
add_months(hiredate,months_between(sysdate-hiredate)) //去除年、月对日期的影响,雇佣日期+雇佣日期至今为止经历的月数:
select empno,ename,hiredate,trunc(months_between(sysdate,hiredate)/12) year,trunc(mod(months_between(sysdate,hiredate),12)) months,trunc(sysdate-add_months(hiredate,months_between(sysdate,hiredate))) day from emp;
转换函数
1. 字符串 TO_CHAR(列 | 日期 | 数字,转换格式) 将日期或数字格式化未指定结构的字符串;
2. 日期 TO_DATE(列 | 字符串,转换格式) 按照指定的转换格式编写字符串后变为日期型数据;
3. 数字 TO_NUMBER(列 | 字符串) 将字符串变为数字;
标记:
·日期:年(yyyy)、月(mm)、日(dd);
·时间:时(hh、hh24)、分(mi)、秒(ss);
·数字:任意数字(9)、本地货币符号(L)。
示例:
select to_char(sysdate,'yyyy-mm-dd') from dual;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
select to_char(sysdate,'yyyy'),to_char(sysdate,'mm'),to_char(sysdate,'dd') from dual;
select * from emp where to_char(hiredate,'mm')=2;
select to_char(931287407209,'L999,999,999,999,999,999,999') from dual;
select to_date('1989-10-19','yyyy-mm-dd') from dual;
select to_number('1') + to_number('2') from dual;
通用函数
1. 数字 NVL(列 | NULL,默认值) 如果传入的内容是NULL,则使用默认数值处理,如果不是NULL则使用原始数值处理;
2. 数据类型 DECODE(列 | 字符串 | 数值,比较内容1,显示内容1,比较内容2,显示内容2,...[,默认显示内容]) 设置的内容会与每一个比较内容进行比较,如果内容相同,则会使用显示内容进行输出,如果都不相同,则使用最后的默认信息输出。
示例:
select empno,ename,sal,comm,(sal+comm)*12 from emp; //没有佣金的雇员的年薪结果为空
select empno,ename,sal,comm,(sal+nvl(comm,0))*12 from emp;
select ename,job from emp;
select ename,job,decode(job,'CLERK','办事员','SALESMAN','销售员','MANAGER','经理','---') from emp;