文章目录
- 单行函数
- 一.字符函数
- 大小写控制函数
- 字符控制函数
- 二、 数字函数
- 三、日期
- 四、 转换函数
- 隐式数据类型转换
- 显式数据类型转换
- to_char函数对**数字**的转换
- 五、通用函数
- 六、 条件表达式
- case表达式
- decode函数
- 七、 嵌套函数
单行函数
定义:只对一行进行变换,每行返回一个结果,可以嵌套和转换数据类型
一.字符函数
大小写控制函数
lower函数:将字符转化成小写字母
upper函数:将字符转化成大写字母
initcap函数:将每个单词的首字母大写
- 例子1
select lower('ATGUIGUJAVA'),upper('AtGuiGu Jva'),initcap('AtGuiGu java') from dual;
- 例子2
select * from employees
where lower(last_name)='king';
分析:只要将last_name的字符全部转换成小写形式之后为king,则可筛选出这些行
字符控制函数
contact函数:连接两个字符串
substr函数:输出特定长度的字符串
length函数:求出字符串的长度
instr函数:输出特定字符首次出现的位置
lpad函数:向左边添加符号,试数据右对齐
rpad函数:向右边添加符号,试数据左对齐
trim函数:删除字符串中位于首尾的特定的字符
replace函数:替代字符串中特定的字符
函数 | 结果 |
concat(‘hello’,‘world’) | helloworld |
substr('helloworld,2,5)(从第2个字符开始向后输出5个字符) | ellow |
length(‘helloworld’) | 10 |
instr(‘hello’,‘l’) | 3 |
lpad(3000,10,‘*’) | ******3000 |
rpad(3000,10,‘*’) | 3000****** |
trim(‘h’ from ‘hhhellohworld’) | ellohworld |
replace(‘abcdabc’,‘b’,‘m’) | amcdamc |
二、 数字函数
round:四舍五入:round(m)=round(m,0)
trunc:截断:trunc(m)=trunc(m,0)
mod:求余
- 例子1
select round(345.456,2),round(345.456,0),round(345.456,-2) from dual;
分析:个位上的数字表示第0个,十分位上的数字表示第1个,百分位上的数字表示第2个…十位上的数字表示第-1个,百位上的数字表示第-2个…以此类推;2表示百分位上的5,5后面是6,进一位,结果为345.46
- 例子2
select trunc(345.456,2),trunc(345.456,0),trunc(345.456,-2) from dual;
分析:个位上的数字表示第0个,十分位上的数字表示第1个,百分位上的数字表示第2个…十位上的数字表示第-1个,百位上的数字表示第-2个…以此类推;2表示百分位上的5,截断不管后面的数字是几,直接舍去,结果为345.45
- 例子3
select mod(1000,100),mod(1000,300) from dual;
三、日期
在日期上加上或者减去一个数字结果依然为日期;两个日期相减返回日期之间相差的天数(日期不允许做加法运算,无意义);日期和日期之间仅能做减法
- 例子1
select sysdate,sysdate+2,sysdate-1 from dual;
日期函数
函数 | 描述 |
months_between | 两个日期相差的月数 |
add_months | 向指定日期中加上若干月数 |
next_day | 指定日期的下一个星期对应的日期 |
last_day | 本月的最后一天 |
round | 日期四舍五入 |
trunc | 日期截断 |
- 例子1(add_months函数、next_day函数)
select add_months(sysdate,2),add_months(sysdate,-3),next_day(sysdate,'星期日') from dual;
注释:本篇文章写于2022年8月30日周二,故周日是9月1日
- 例子2(last_day函数)
select last_day(sysdate) from dual;
注释:本篇文章写于2022年8月30日周二,故本月的最后一天是8月31日
- 例子3(round函数)
select round(sysdate,'month') from dual;
注释:本篇文章写于2022年8月30日周二,本月已经过半,故四舍五入之后为9月1日
四、 转换函数
隐式数据类型转换
oracle自动完成的数据类型转换
date、vachar2和number之间可以互相转换
- 例子
select '12'+2 from dual;
分析:字符型‘12’转换成number型12
显式数据类型转换
- 例子 1
select ename,hiredate
from emp
//where to_char(hiredate,'yyyy-dd-mm')='1882-01-23';
//where to_char(hiredate,'yyyy"年"dd"月"mm"日"')='1882年01月23日';
//where to_date('1882-01-23','yyyy-dd-mm')=hiredate;
- 例子2
select to_char(1234567.89,'999,999,999.99') from dual;
- 例子3
select to_number('1,234,567.89','999,999,999.99') from dual;
to_char函数对数字的转换
符号 | 含义 |
9 | 数字 |
0 | 零 |
$ | 美元符号 |
L | 本地货币符号 |
. | 小数点 |
, | 千位符 |
五、通用函数
这些函数适用于任何数据类型,同时也适用于空值
nvl(n1,n2):如果n1不为null则输出n1;否则输出n2
nvl2(n1,n2,n3):n1不为null,返回n2;否则返回n3
nullif(n1,n2):n1=n2返回null;否则返回n1
- 例子1
select ename,sal*12*(1+nvl(comm,0)) "annual sal" from emp;
分析:如果没有使用nvl函数,则comm为空值时表达式结果也为空值;使用nvl函数后,若comm为空值,则comm自动转换成0,表达式的结果不为空
- 例子2
select ename,comm,nvl2(comm,comm+0.015,0.01) from emp;
六、 条件表达式
case表达式
- 例子1
select empno,ename,deptno,case deptno
when 10 then sal*1.1 when 20 then sal*1.2 when 30 then sal*1.3 end "new_sal"
from emp
where deptno in(10,20,30)
order by deptno asc;
decode函数
- 例子2
select empno,ename,deptno,decode(deptno,10,sal*1.1,
20,sal*1.2,
30,sal*1.3) new_sal
from emp
where deptno in(10,20,30)
order by deptno asc;
七、 嵌套函数
单行函数可以嵌套,执行顺序是由内到外