单行函数
单行函数是每个数据库的“特色”函数。
单行函数语法:
参数说明:function_name(column|expression,[arg1,arg2,…]);
- function_name: 函数名称
- column: 数据库列名
- expression: 字符串或计算表达式
- arg1,arg2: 在函数中使用参数
单行函数分类:
- 字符函数:接受字符输入并返回字符或数值
- 数值函数:接受数值输入并返回数值
- 日期函数:对日期数据进行操作
- 转换函数:从一种数据类型转换为另一种数据类型
- 通用函数:NVL函数、DECODE函数
1.字符函数
i)UPPER("varchar2")/lower("varchar2")
· 将小写字母转换为大写。
· 将大写转换为小写。SELECT UPPER('smith') FROM DUAL ;
SELECT LOWER('HELLOWORLD') FROM dual ;
ii)INITCAP("varchar2")· 将首字母转为大写。
SELECT INITCAP(ename) FROM emp ;
iii)concat()
· 字符串连接。
SELECT CONCAT('hello ','world') FROM DUAL ;
iv)
- 字符串截取:substr() --substr(varchar,num1,num2)截取函数从0和从1效果一样,都是从首位。varchar是字段,num1是位置,可以用负数,num2 是长度。
- 字符串长度:length()
- 内容替换: replace()
SELECT substr('hello',1,3) 截取字符串,length('hello') 字符串长度,replace('hello','l','x') 字符串替换 FROM DUAL ;
2.数值函数
- 四舍五入: ROUND()
- 截断小数位: TRUNC()
- 取余(取模): MOD
i)ROUND()· ROUND()四舍五入:SELECT ROUND(789.536) FROM dual ;
·ROUND(num1,num2)--第一个是被操作数,第二个截取的位数。SELECT ROUND(789.536,2) FROM dual ;
SELECT ROUND(789.536,-2) FROM dual ;·--这段读不懂。。
ii)TRUNC()
· TRUNC(num)不会保留任何的小数,直接砍掉。· TRUNC(num1,num2) num1被操作数,num2保留的小数位数。SELECT TRUNC(789.536) FROM DUAL ;
SELECT TRUNC(789.536,2) FROM DUAL ;
iii)MOD()
· MOD(num1,num2) num1 被除数,num2除数。SELECT MOD(10,3) FROM DUAL ; --答案1。
3.日期函数
- SYSDATE
· 系统当前时间
·也可以求星期数SELECT SYSDATE FROM DUAL ;
SELECT empno,ename,ROUND((SYSDATE-hiredate)/7) FROM emp ;
- MONTHS_BETWEEN(): 求出给定日期范围的月数
- ADD_MONTHS(): 在指定日期加上指定的月数,求出之后的日期
- NEXT_DAY(): 下一个的浸提那是哪一个日期
- LAST_DAY(): 求出给定日期的最后一天日期
i)MONTHS_BETWEEN()· 两者之间的月份SELECT empno,ename,ROUND(MONTHS_BETWEEN(sysdate,hiredate)) FROM emp ; --hiredate,表中的时间。
ii)ADD_MONTHS()· 在某时间上添加几个月SELECT ADD_MONTHS(SYSDATE,4) FROM DUAL ;
iii)NEXT_DAY()· 求出下一次给定的日期数· 求出某日期当月的最后一天SELECT NEXT_DAY(SYSDATE,'星期一') FROM DUAL ;
iv)LAST_DAY()SELECT LAST_DAY(SYSDATE) FROM DUAL ;
4.转换函数
- TO_CHAR():转换为字符串
- TO_NUMBER():转换成数字
- TO_DATE():转换成日期
i)TO_CHAR()·对日期进行拆分,使用固定的通配符。SELECT empno,ename,TO_CHAR(hiredate,'yyyy') year , TO_CHAR(hiredate,'mm') months , TO_CHAR(hiredate,'dd') day FROM emp ;
·将日期的显示格式进行转换SELECT empno,ename,TO_CHAR(hiredate,'yyyy-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 ;
ii)TO_NUMBER()· 将字符串变为数字的一种函数SELECT TO_NUMBER('123') + TO_NUMBER('123') FROM DUAL; --结果是246.
iii)TO_DATE()·将一个字符串变为DATE型的数据。5.通用函数SELECT TO_DATE('2009-02-16','yyyy-mm-dd')FROM DUAL ;--输出Oracle默认的日期。 16-2月 -09。当然假如是2109年和2009年在此无法分辨。
i)员工年薪=(基本工资+奖金)*12.
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 ;
· 如果需要进行计算的时候,对于NULL必须使用NVL()进行一个转换操作。
·DECODE() == 等同于switch
SELECT DECODE(1,1,'内容是1',2,'内容是 2',3,'内容是3')FROM DUAL;