单行函数分为:字符函数、数字函数、日期函数、转换函数、通用函数。

在oracle中,对字符串进行操作的时候,必须的写完整的sql语句。例如:要将hello装换成大写:

select upper('hello') from emp;

这样显示的结果你就会发现出现了14行,记录查询就会很不方便。所以在oracle中就有一个虚拟的表 dual;

select upper('hello') from dual;

1、字符函数:主要进行字符串的操作。

     UPPER(字符串|列):将输入字符串转换成大写返回。

     LOWER(字符串|列):将输入的字符串转换成小写返回。

  INITCAOP(字符串|列):开头首字母大写。

 LENGTH(字符串|列):返回字符串的长度。

 REPLACE(字符串|列,'old string','new string'):替换。

 SUBSTR(字符串|列,开始点[,结束点]):截取字符串。例:要查询的一个人名的信息:

select * from emp where ename=UPPER('&str');

其中“&”是属于替代变量,即要让你输入的内容。

②将所有的雇员的姓名小写返回

select lower(ename) from emp;

2、数字函数

round(数字|列[,保留小数的位数]);四舍五入

trunc(数字|列[,保留小数的位数]):舍弃制定位置的数字。

mod(数字1,数字2):取模,取余数。

3.日期函数:

取当前日期:

select  sysdate from dual;

SYSDATE
-----------
2012/4/17 1

日期+数字:表示若干天后的日期

日期-数字:表示若干天前的日期

日期(大)-日期(小):表示两个日期的相隔的天数。

last_day(日期):求出指定日期的在本月的最后一天

select last_day(sysdate) from dual;
 
LAST_DAY(SYSDATE)
-----------------
2012/4/30 10:53:0

next_day(日期,星期数):求出下一个指定星期x的日期;

 select next_day(sysdate,'星期一')  下周一的日期 from dual;
 
NEXT_DAY(SYSDATE,'星期一')
--------------------------
2012/4/23 10:55:39

add_months(日期,数字):求出若干月之后的日期

select add_months(sysdate,4) from dual;
 
ADD_MONTHS(SYSDATE,4)
---------------------
2012/8/17 10:57:31

months_between(日期1,日期2):求出两个日期之间相隔的月数。

 select months_between(sysdate,hiredate) from emp;

4、转换函数

 转换函数是将 数字(number)、字符串(varchar2)、日期(date) 之间互相转换。

to_char(字符串|列,格式字符串):将日期转化成要求的格式返回

select to_char(sysdate,'yyyy-MM-dd') 日期 from dual;
 
日期
----------
2012-04-17

想将数字前面的0去掉的话,可以加一个‘fm’:

select to_char(sysdate,'fmyyyy-MM-dd') 日期 from dual;
 
日期
----------
2012-4-17

to_char()也可以格式化数字:例如将9832874293647格式化成9,832,874,293,647的形式。

select to_char(9832874293647,'9,999,999,999,999') from dual;

其中9表示的一位数字

to_date(字符串|列,格式字符串):将字符串转化成要求的格式日期返回

select to_date('20120909','yyyy-mm-dd') from dual;
 
TO_DATE('20120909','YYYY-MM-DD
------------------------------
2012/9/9

to_number(字符串):转化成数字。

select to_number('3')+to_number('3') from dual;

这个加法运算下边也可以实现:

select '3'+'3' from dual;

5、通用函数

nvl():处理null,将空转化成0

select ename,sal,comm,(sal+nvl(comm,0))*12 from emp;

decode():多条件多数值判断。

decode(数值|列,判断值1,显示值1,判断值2,显示值2,判断值3,显示值3...)

这些都是成对出现的。例如:我们将雇员中所有人的职位信息转化成中文

select ename,decode(job,'SALESMAN','销售员','CLERK','办事员','MANAGER','经理','ANALYST','分析员','PRESIDENT','主席') from emp;