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函数:
通过该函数也可以指定小数点的保留位数:
也可以使用负数表示位数:
-
取余(取模)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;