定义:只对一行进行变换,每行返回一个结果,可以嵌套和转换数据类型
lower函数:将字符转化成小写字母
upper函数:将字符转化成大写字母
initcap函数:将每个单词的首字母大写
select lower('ATGUIGUJAVA'),upper('AtGuiGu Jva'),initcap('AtGuiGu java') from dual;
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:求余
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
select trunc(345.456,2),trunc(345.456,0),trunc(345.456,-2) from dual;
分析:个位上的数字表示第0个,十分位上的数字表示第1个,百分位上的数字表示第2个…十位上的数字表示第-1个,百位上的数字表示第-2个…以此类推;2表示百分位上的5,截断不管后面的数字是几,直接舍去,结果为345.45
select mod(1000,100),mod(1000,300) from dual;
在日期上加上或者减去一个数字结果依然为日期;两个日期相减返回日期之间相差的天数(日期不允许做加法运算,无意义);日期和日期之间仅能做减法
select sysdate,sysdate+2,sysdate-1 from dual;
函数 | 描述 |
---|---|
months_between | 两个日期相差的月数 |
add_months | 向指定日期中加上若干月数 |
next_day | 指定日期的下一个星期对应的日期 |
last_day | 本月的最后一天 |
round | 日期四舍五入 |
trunc | 日期截断 |
select add_months(sysdate,2),add_months(sysdate,-3),next_day(sysdate,'星期日') from dual;
注释:本篇文章写于2022年8月30日周二,故周日是9月1日
select last_day(sysdate) from dual;
注释:本篇文章写于2022年8月30日周二,故本月的最后一天是8月31日
select round(sysdate,'month') from dual;
注释:本篇文章写于2022年8月30日周二,本月已经过半,故四舍五入之后为9月1日
oracle自动完成的数据类型转换
date、vachar2和number之间可以互相转换
select '12'+2 from dual;
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;
select to_char(1234567.89,'999,999,999.99') from dual;
select to_number('1,234,567.89','999,999,999.99') from dual;
符号 | 含义 |
---|---|
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
select ename,sal*12*(1+nvl(comm,0)) "annual sal" from emp;
分析:如果没有使用nvl函数,则comm为空值时表达式结果也为空值;使用nvl函数后,若comm为空值,则comm自动转换成0,表达式的结果不为空
select ename,comm,nvl2(comm,comm+0.015,0.01) from emp;
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;
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;
单行函数可以嵌套,执行顺序是由内到外