Oracle-----转化函数&通用函数

上一篇👉: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;

在这里插入图片描述


下一篇👉Oracle-----认识多表查询&操作案例

本篇博客到这就完啦,非常感谢您的阅读🙏,如果对您有帮助,可以帮忙点个赞或者来波关注鼓励一下喔😬 ,嘿嘿👀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值