5.单行函数

function_name(column|expression,[arg1,arg2,…])

参数说明:function_name:函数名称

column:数据库列名

expression:字符串或计算表达式

arg1,arg2:在函数中使用参数

 

1)字符函数

接受字符输入并返回字符或数值

 

a)小写变大写UPPER()

如:SELECT UPPER('smith') FROM dual;

如用户查找时不会考虑姓名是大写还是小写,所以在查询语句中为了方便就可以使用upper函数:

SELECT* FROM emp WHERE ename = UPPER('Smith') ;

 

b)大写变小写LOWER()

如:SELECT LOWER ('HELLO WORLD') FROM dual;

 

c)首字母大写INITCAP()

如:SELECT INITCAP ('HELLO WORLD') FROM dual;

如将雇员表中的雇员姓名变为首字母大写:

SELECT INITCAP (ename) FROM emp;

 

d)字符串连接CONCAT()

但是此种方式不如||好用

如:SELECT CONCAT ('hello','world') FROM dual;

 

e)字符串截取SUBSTR()

 

f)字符串长度LENGTH()

 

g)字符串替换REPLACE()

如:SELECT SUBSTR('hello',1,3) 截取字符串,

LENGTH('hello') 字符串长度,

REPLACE('hello', 'l', 'x') 字符串替换

    FROM dual;

截取点从0和1都是一样的

如已显示所有雇员的姓名及姓名的后三个字符(因为雇员姓名的字符喜欢长度不一样,只能求出整个的长度再减去2,进行截取):

SELECT ename, SUBSTR(ename,LENGTH(ename)-2) FROM emp;

SUBSTR可以倒着截取,只要输入的位置是负数就表示倒着进行

SELECT ename, SUBSTR(ename,-3,3) FROM emp;

 

 

2)数值函数

接受数值输入并返回数值

 

a)四舍五入ROUND()

如执行四舍五入操作:

如保留两位小数:

如保留整数位:

 

b)截断小数位TRUNC()

与ROUND()不同,在TRUNC()中不会保留任何的小数,而且也不会进位

如验证TRUNC函数:

通过该函数也可以指定小数点的保留位数:

也可以使用负数表示位数:

  1. 取余(取模)MOD()

 

3)日期函数

对日期型数据进行操作

日期±数字=日期

日期-日期=数字(天数)

如:显示10部门雇员进入公司的星期数

首先要知道前日期:

求出星期数:当前日期-雇用日期=天数 天数/7=星期数:

SELECT empno,ename,ROUND((SYSDATE-hiredate)/7) FROM emp;

 

a)MONTHS_BETWEEN()给定日期范围的月数

 

b)ADD_MONTHS()指定日期上加上指定约束,求出之后的日期

 

c)NEXT_DAY()下一个的指定日期

 

d)LAST_DAY ()求出给定日期的最后一天日期

 

4)转换函数

从一种数据类型转换为另一种数据类型

 

a)TO_CHAR():转换成字符串

拆分年月日:如要将雇用日期的年月日进行分开,就可以使用这个函数进行拆分。但是首先必须指定拆分的通配符:

SELECT empno,ename,

TO_CHAR(hiredate,'yyyy') year,

TO_CHAR(hiredate,'mm') months,

TO_CHAR(hiredate,'dd') day

FROM emp;

日期格式转换:

Oracle中默认的日期格式:19-4月 -87

中国的格式:1987-04-19

SELECT empno,ename,TO_CHAR(hiredate,'yyyy-mm-dd') FROM emp;

去掉前导0:如果是5月会用05表示,如果不希望出现的话,可以使用fm去掉

SELECT empno,ename,TO_CHAR(hiredate,'fmyyyy-mm-dd') FROM emp;

分割数字:在数字中加入一些符号以分割太长的数字,一般使用","

9:表示一位数字

SELECT empno,ename,TO_CHAR(sal,'99,999') FROM emp;

金额显示 方式

$:表示美元

L:Local的缩写,以本地的语言显示金额

SELECT empno,ename,TO_CHAR(sal,'$99,999') FROM emp;

SELECT empno,ename,TO_CHAR(sal,'L99,999') FROM emp;

 

 

b)TO_NUMBER():转换成数字

SELECT TO_NUMBER('123')+TO_NUMBER('123') FROM dual;

 

c)TO_DATE():转换成日期

SELECT TO_DATE('2009-02-16','yyyy-mm-dd') FROM dual;

 

5)通用函数

 

a)NVL函数

如计算年薪

SELECT empno,ename,(sal+comm)*12 FROM emp;

造成这样的结果是有些雇员的奖金是NULL,NULL计算之后还是NULL,此时就可以使用NVL函数,将一个指定的null值变成指定的内容

SELECT empno,ename,NVL(comm,0),(sal+NVL(comm,0))*12 income FROM emp;

 

b)DECODE函数

类似于IF…ELSE语句

DECODE(col/expression,search1,result1[,search2,result2,…][,default])

说明:col/expression:列名或者表达式

search1、search2…searchi:用于比较的条件

result1、result2…resulti:返回值

如果col/expression和searchi相比较,结果相同的话则返回resulti,如果没有与col/expression相匹配的结果,则返回默认值default

SELECT DECODE(1,1,'内容是1',2,'内容是2',3,'内容是3') FROM dual;