Oracle-----单行函数简介&字符串函数

上一篇👉:Oracle-----综合练习:基础查询


总目录👉震惊!史上最菜的Oracle 11g教程(大佬勿进)


🚴大家好!我是近视的脚踏实地,这篇文章主要是讲述单行函数简介以及来学习第一个字符串函数
     唯有行动  才能解除你所有的不安

1、目标

1、掌握单行函数的基本概念
2、使用常见的单行函数进行数据的操作

2、具体内容

在数据库里面,为了方便用户的开发,往往会提供有一系类的支持函数,利用这些函数可以针对于数据进行处理,例如:在进行根据姓名查询的时候,如果说姓名本身是大写字母,而查询写的是小写字母,此时将不会有任何的结果返回,所以考虑到此类情况,往往会在数据保存的时候或者查询的时候对数据进行一些处理,而这些处理每一个数据库都有自己的函数库,利用函数可以实现特定功能。关于函数,你只需要知道这个函数的功能是什么,不用知道是怎么实现的

在Oracle之中,对于函数基本的使用结构如下👇:
返回值 函数名称(列 | 数据)
而根据函数的特点,单行函数可以分为以下几种:字符串函数、数值函数、日期函数、转换函数、通用函数。
(这些都是比较常用的函数,Oracle中的函数有几万个,不要认为试图可以全记住,这里讲的函数主要是讲的是Oracle数据库之中跟其他数据库都有类似功能的函数,所以并且是常用函数,其他数据库函数想知道可以上Oracle官方站点下载函数文档,都是有说明的)

3、字符串函数

字符串函数可以针对于字符换数据进行处理,在Oracle之中对于此类函数定义有如下几种👇:
upper()、lower()、initcap()、replace()、length、substr()。

3.1大小写转换函数(upper()、lower())

     转大写函数:字符串 upper(列 | 字符串)
     转小写函数:字符串 lower(列 | 字符串)

但是现在问题是,如果要想在Oracle之中验证字符串函数,那么必须要保证编写的是完整的SQL语句。
那么下面尝试来验证一下这个函数,如下语句👇:,在这个过程中,我们的目的是想把这个字符串全部转成小写,而这个字符串本身有大写,有小写,查询结果如下

select lower('Hello') from emp;

在这里插入图片描述
(然后很失望,发现hello重复了14行,因为emp表中有14行记录,所以他的数据会重复14行)
那么可能有的就会说,重复用distinct关键字删掉就行了👇:

select distinct lower('Hello') from emp;

在这里插入图片描述
(那么这样理论上是没错,但是你把14行查询出来后又删了,这个代码有点太差了,万一emp表中有八百行,那就得删799行,太麻烦了)

3.1.1 范例1:验证函数

范例1: 验证函数

所以为了可以方便地进行函数验证,我们往往会使用一张虚拟表:dual表(后边的文章会有解释)

select distinct lower('Hello') from dual;

在这里插入图片描述
那么也可以来验证转大写👇:

select distinct lower('Hello'),upper('Hello') from dual;

在这里插入图片描述

3.1.2 范例2:用户输入

范例2: 用户输入
几乎所有的数据库里面都会提供这两个函数,如果说现在换个思路:现在要求由用户自己输入一个雇员姓名而后进行雇员信息的查找。

我们曾经写过这样的代码👇:

select *
from emp;
where ename = 'SMITH';

这个是找到SMITH的详细信息,但是呢这个值固定的不好,我希望我可以直接输入一个,那么就可以这样👇:

select *
from emp
where ename = '&inputname';

在这里插入图片描述
可以看到他就会让你输入一个ename 的值,那么平时大家输入数据的时候很少人回去考虑大小写,那么如果直接写小写导致的结果就是查询不出,因为Oracle里边的数据是区分大小写的👇:
在这里插入图片描述
所以在这样的操作情况下,我们很难保证让用户输入的值真的跟我们期待的是那样的,那么上边的 &inputname 就是替代变量,这个替代变量对我们意义并不大,他只是在PL/SQL编程中有点用处

那么从以上我们知道用户在进行数据输入的时候几乎不会去考虑大小写,所以为了保证数据可以正常地查询出来,我们往往需要针对于输入数据做一个处理,由于在数据表之中所有的数据都是大写操作,那么我们就可以在接收完输入数据之后我们将其全部自动变为大写字母。

3.1.3 范例3:改善输入操作

范例3: 改善输入操作

select *
from emp
where ename = upper('&inputname');

在这里插入图片描述
所以在一些要求严格的操作环境下,对于不区分大小写操作的时候基本上有两种做法:
     ※ 在数据保存的时候将所有的数据统一变为大写或小写字母,这样在查询的时候就可以直接利用特定的函数进行处理
(第一种它本身就是统一的大小写风格,这样我们在查询数据的时候至少对原始数据我们不用再做upper()或者lower()处理)

     ※ 在数据保存的时候依然将所有的数据按照原始的方式保存,而后在查询的时候将每一个数据中的字母都变为大写形式查询
(第二种做法,除了要对输入数据进行upper()或者lower()处理之外,还要对原始数据进行处理,这样性能自然会差)

在所有不区分大小写操作的项目之中,我们保存数据时就必须对数据进行提前的处理.。

3.2首字母大写(inicap())

     语法:字符串 inicap(列 | 数据)

3.2.1 范例1:观察首字母大写

范例1: 观察首字母大写

select initcap('HelloWorld') from dual;

在这里插入图片描述
(可以看到W变小写了)

那么其实他的作用就是除了首字母变为大写之外,其余的字母都是小写

3.2.2 范例2:将每一个雇员的姓名首字母大写

范例2: 将每一个雇员的姓名首字母大写;

select initcap(ename) 
from emp;

在这里插入图片描述

3.3计算字符串的长度 (length())

     语法: 数字 length(列 | 字符串数据)

3.3.1 范例1:查询出每个雇员姓名以及雇员姓名的长度

范例1: 查询出每个雇员姓名以及雇员姓名的长度

select ename,length(ename)
from emp;

在这里插入图片描述
那么所有的单行函数可以在SQL语句的任意位置上出现。

3.3.2 范例2:查询雇员姓名长度为5的全部雇员信息

范例2: 查询雇员姓名长度为5的全部雇员信息
     需要针对于所选的数据行进行筛选,那么一定要在where子句之中出现。

select *
from emp
where length(ename) = 5;

在这里插入图片描述

3.4字符串替换 (replace())

字符串替换:可以使用指定的内容替换掉原始字符串中的数据。
     语法:字符串 replace(列 | 数据,要查找内容,新的内容)

3.4.1 范例1:将所有雇员姓名之中的字母A替换为"_"

范例1: 将所有雇员姓名之中的字母A替换为"_"

select replace(ename,'A','_')
from emp;
或者:
select replace(ename,upper('a'),'_')
from emp;

在这里插入图片描述
实际上使用replace()函数可以取消掉字符串中的全部空格数据。

3.4.2 范例2:消除空格数据

范例2: 消除空格数据

select replace('hello world nihao zaijian',' ','')
from dual;

在这里插入图片描述

3.5字符串截取 (substr())

     语法一: 字符串 substr(列 | 数据,开始点,)从指定的开始点一直截取到结尾;
     语法二: 字符串 substr(列 | 数据,开始点,长度)截取指定范围的字符串。

3.5.1 范例1:消除空格数据

范例1: 字符串截取操作
     ※从指定位置截取到结尾:

select substr('helloworldnihao',11)
from dual;

在这里插入图片描述
     ※截取部门内容

select substr('helloworldnihao',6,5)
from dual;

在这里插入图片描述
但是对于substr()函数千万要记住一点,它的下标是从1开始的,也就是说在进行截取的时候字符串从1开始做为索引下标,但是即使你设置的是0,那么也会按照1来处理👇:

select substr('helloworldnihao',0,5)
from dual;
或者
select substr('helloworldnihao',1,5)
from dual;

在这里插入图片描述

3.5.2 范例2:要求截取每一位雇员姓名的前三位字母

范例2: 要求截取每一位雇员姓名的前三位字母

select ename,substr(ename,1,3)
from emp;

在这里插入图片描述
但是现在要求进行改变,截取每个姓名的后三个字母。这个时候会存在有三个做法:
     ※传统做法:如果要进行截取,那么首先一定要确认出截取的开始点,所以对于我们的开始点由于每个姓名的长度是不一样的,所以开始点也不一样。那么此时最好的做法就是进行计算,使用length()来计算长度

select ename,substr(ename,length(ename)-2)
from emp;

在这里插入图片描述
     ※substr()的支持,可以设置为负数索引。

select ename,substr(ename,-3)
from emp;

在这里插入图片描述
实际上只有Oracle才会支持这种负数的索引设计,其他的任何语言都没有。

可能会有这么一个面试题:请问Oracle中的substr()函数截取时字符串的索引是从1开始还是从0开始?

Oracle中的字符串索引都是从1开始,即使设置为0也会将其自动变为1。


下一篇👉Oracle-----数值函数&日期函数

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值