上一篇👉:Oracle-----数值函数&日期函数
总目录👉震惊!史上最菜的Oracle 11g教程(大佬勿进)
文章目录
🚴大家好!我是近视的脚踏实地,这篇文章主要是讲述转化函数以及通用函数
唯有行动 才能解除你所有的不安
1、转换函数(重点)
实际上现在为止已经接触过Oracle中的三种数据类型:字符串、数字、日期。所以所谓的转换函数指的就是可以实现字符串与日期的转化、数字的转化。转化函数一共提供有三种:to_char()、to_date()、to_number().
1.1 转字符串函数(to_char())
转字符串函数,数字或者是日期可以转化为字符串。
语法:字符串 to_char(列 | 日期 | 数字,转换格式)
对于转换格式而言主要有两类格式:
※日期转化为字符串:年(yyyy)、月(mm)、日(dd)、时(hh、hh24)、分(mi)、秒(ss);
※数字转化为字符串:任意的一位数字(9)。货币(L,本地货币)。
1.1.1 范例1: 格式化日期
范例1: 格式化日期
select to_char(sysdate,'yyyy-mm-dd')
from dual;
当然精确到时分秒也可以👇:
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')
from dual;
一定要记住,这样的转换操作只是给我们提供了一个思想:日期要想改变格式,最终的数据类型就是字符串。
这样的转换实际上会破坏程序的一致性。
实际上现在可以进一步的去探索to_char()的好处,它可以实现年、月、日的拆分。
1.1.2 范例2: 查询出每个雇员的编号、姓名、雇佣年份
范例2: 查询出每个雇员的编号、姓名、雇佣年份。
select empno,ename,to_char(hiredate,'yyyy') year
from emp;
1.1.3 范例3: 查询出所有在2月雇佣的雇员信息
范例3: 查询出所有在2月雇佣的雇员信息
select *
from emp
where to_char(hiredate,'mm')='02';
或者
select *
from emp
where to_char(hiredate,'mm')=2;
那么上面写2或者02都可以,Oracle中实际上提供有数据类型的自动转化,如果发现比较的类型不统一,在一定的范围内他是可以转换的。
to_cahr()函数除了可以进行日期的转化之外,也支持数字转换。
1.1.4 范例4: 转换数字
范例4: 转换数字
select to_char(78923489043209,'999,999,999')
from dual;
可以看到当要转换位数小的时候,它发现无法满足,就用#来描述了,所以要尽可能给足够的位数操作👇:
select to_char(78923489043209,'999,999,999,999,999')
from dual;
这就叫数字的格式化操作,当然,加个人民币更实用,表示使用本地货币👇:
select to_char(78923489043209,'L999,999,999,999,999')
from dual;
1.2 转日期函数(to_date())
如果说现在某一个字符串按照"日-月-年"的方式编写,那么可以自动转化为日期类型,但是也可以将指定格式的字符串转换为日期类型,这个可以依靠to_date()函数完成。
语法:字符串 to_date(字符串,转换格式)
※转化格式:年(yyyy)、月(mm)、日(dd)、时(hh、hh24)、分(mi)、秒(ss);.
1.2.1 范例1: 实现字符串转换为日期
范例1: 实现字符串转换为日期
select to_date('1998-01-05','yyyy-mm-dd')
from dual;
1.3 转数字函数(to_number())
可以将字符串(由数字组成)变为数字
语法:数字 to_number(字符串)
1.3.1 范例1:验证
范例1: 验证
select to_number('1') + to_number('2')
from dual;
因为Oracle存在有自动转化的特性,也可以直接这么写👇:
select '1' + '2'
from dual;
所在大部分情况下,不需要这么费劲转换,所以在整个过程里边,唯一重点的函数就是to_char(),这个函数的重点在于学习的一个体会过程,而不是在实际应用上,利用to_char()可以进行日期的年、月、日数据的拆分,才是它的一个亮点所在,后边两个几乎不用
2、通用函数(Oracle自己特色)
在Oracle里面提供有两个简单的数据处理函数:nvl()、decode()。并且随着版本的提升,这两个函数又衍生出了许多的子函数。
2.1 处理null
2.1.1 范例1:计算出每一个雇员的年薪,包括基本工资和佣金。
范例1: 计算出每一个雇员的年薪,包括基本工资和佣金。
那么下面首先来观察这样一个查询,计算出每一个雇员的年薪,包括基本工资和佣金。
select empno,ename,job,sal,comm,(sal+comm)*12 income
from emp;
现在发现,所有没有佣金的雇员,在进行年收入计算的时候,最终的计算结果都是null,因为null在进行任何数学计算后结果永恒都是null。而实际上在计算之中,如果发现内容为null,如果是数字则应该用0来替代,那么我们就需要利用nvl()函数来解决此类问题。
语法:nvl(列 | null,为空的默认值)。如果现在列上的内容不是null则使用列原本的数据,如果为null则使用设置的默认值
select empno,ename,job,sal,nvl(comm,0),(sal+nvl(comm,0))*12 income
from emp;
2.2 多数值判断
所谓的多数值判断,指的是根据不同的结果可以在输出的时候进行一个数据的转换,假设,现在每一位雇员都有自己的职位,那么现在职位使用的是英文描述,决定将其更换为中文。
语法:decode(列,匹配内容1,显示内容1,匹配内容2,显示内容2,…[,默认值])
2.2.1 范例1:将雇员职位英文更换为中文
范例1: 将雇员职位英文更换为中文
那么就是要针对每一列中的值进行判断,在进行一个输出的转换
select ename,job,decode(job,'CLERK','办事员','SALESMAN','销售')
from emp;
select ename,job,decode(job,'CLERK','办事员','SALESMAN','销售','暂无此信息')
from emp;
可以发现没有加上‘暂无此信息’时,没有匹配的结果都是null,加上了就是设置的默认值‘暂无此信息’
select ename,job,decode(job,'CLERK','办事员','SALESMAN','销售',
'MANAGER','经理','ANALYST','分析',
'PRESIDENT','总裁','暂无此信息')
from emp;
本篇博客到这就完啦,非常感谢您的阅读🙏,如果对您有帮助,可以帮忙点个赞或者来波关注鼓励一下喔😬 ,嘿嘿👀