SQL单行函数

单行函数

定义:只对一行进行变换,每行返回一个结果,可以嵌套和转换数据类型

一.字符函数

大小写控制函数

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;

在这里插入图片描述

七、 嵌套函数

单行函数可以嵌套,执行顺序是由内到外

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值