
?哈罗,各位小伙伴大家好,又见面了,我还是那个不吃饱不干活的小尘,欢迎来到本期的SQL语言之字符函数部分,让我们一起进入知识的海洋吧~???
首先,这次进入的是函数这一个新的篇章,所以要先导入一下,并且简单说一下函数的分类和调用,小伙伴们不要不耐烦哦,那咱们开始吧!
一、引入
(1)java中的方法
概念
这里讲的函数类似于java中讲的方法。将一组逻辑语句封装在方法体中,对外暴露方法名。
将我们实现某个功能的一组逻辑语句,封装到了方法中。对外暴露一个公开的名字。回头再想用这些逻辑语句,只需要调用这个方法名就可以了。
好处
1、隐藏实现细节。
2、提高代码重用性。下次再用这些语句,就不需要再写一遍了,直接调用方法名即可。
(2)SQL中函数的调用
语法
SELECT? ?函数名(实参列表)【 FROM? ?表 】;
问:什么时候要加? FROM? ?表 ?
函数中的参数用到表中的字段的时候要加 FROM? 表 。如果没有用到表中字段,就不需要加。
执行过程
?相当于我们在调用该函数,把该函数的逻辑语句完全执行完,最终将它的返回值显示出来。
问:在调用的时候,最关键的是什么?
1、该方法叫什么(函数名)
2、这个方法是干什么的(函数功能)
(3)SQL中函数的分类?
1、单行函数
做处理使用。
传过去一个参数,最终一定会有一个返回值。
如:CONCAT? 、LENGTH?、IFNULL
2、分组函数(统计函数、聚合函数、组函数)
做统计使用。
给它传进去一组值,最终返回一个值。
二、函数具体分类
(1)字符函数
? ?用于对字符型的处理。传入的参数类型是字符型。
1、LENGTH
该函数用于获取参数值字节个数。
敲入函数并打上左半边括号,就会显示它对应参数应该放什么。
认识:
如图,我们可以知道,LENGTH函数里面放的是一个字符(str)。

如果我们在里面放入 'john',在这里不需要加 FROM? 表名 。
看一下执行结果:

如果我们在里面放中文呢?

我们可以看到,结果是15。
因为一个字母是一个字节,而一个汉字是三个字节。但这也要看字符集。
不妨来看一下该客户端是什么字符集:
SHOW? VARIABLES? LIKE? '%char%'

UTF8字符集下,默认一个英文字母占一个字节,一个汉字占三个字节。
GBK字符集下,默认一个英文字母一个字节,一个汉字两个字节。?
2、CONCAT
该函数用于拼接字符串。
认识:
如图,我们可以知道,CONCAT函数里面放的是需要连接的字符串。

?
如果我想把last_name和first_name连在一起,中间用一个下划线隔开:
SELECT
CONCAT(last_name,'_',first_name)
FROM
employees;
看一下执行结果:

?
3、upper、lower
改变大小写
认识:

?如图,我们可以知道,UPPER函数里面放的是字符型的值。

如图,我们可以知道,LOWER函数里面放的也是字符型的值。?
那两个函数有什么用呢?
<1>?和第一个举的例子一样,我们把'john'放入试试。
发现放在UPPER函数中john变成了大写。

而LOWER函数却没有发应:

<2>?如果是大写的JOHN呢?
发现放在UPPER函数中JOHN不变。

?而放在LOWER函数中变成了小写。

?
<3>?那如果是这个‘jOhN’呢?
我们发现在UPPER函数将字符都变成的是大写。
?
而LOWER函数将字符都变成的是小写。
?
?总结
UPPER函数将字符都变成的是大写。
UPPER函数:如果本来就是大写,那就不用变化;如果有大写有小写,那小写的会跟着变化。
LOWER函数将字符都变成的是小写。
LOWER函数:如果本来就是小写,那就不用变化;如果有大写有小写,那大写的会跟着变化。
案例、
将姓变大写,名变小写,然后拼接。
代码:
SELECT
CONCAT(UPPER(last_name),LOWER(first_name)) AS 姓名
FROM
employees;
执行结果:?

?
在上面我们也可以看见,CONCAT和UPPER、LOWER函数是嵌套使用的。
说明函数是可以嵌套调用的,也就是某个函数的返回值,可以充当另一个函数的参数。
4、substr? (substring)
截取字符
认识:

?4代表什么?
代表是4个函数重载。
方法重载:名字一样,参数列表不一样。即同一个函数名可以放不同数量的参数。
在这儿第一个放的是一个字符(str),第二个放的是位置(pos)。
<1> 案例一、
把“孙悟空大闹天宫”的“大闹天宫”给返回。
函数第一个参数要写上“孙悟空大闹天宫”,第二个要写上“大闹天宫”的位置(索引),即4。
注意:索引从1开始。
? ? ? ? ? ?截取是从这个索引开始,后面所有的字符。
代码:
SELECT
SUBSTR('孙悟空大闹天宫',4) AS out_put;
执行结果:?

?
<2> 案例二、
把“孙悟空大闹天宫”的“孙悟空”给返回。

代码:
SELECT
SUBSTR('孙悟空大闹天宫',1,3) AS out_put;
?
执行结果:

总结?
使用两个参数,截取从指定索引处后面的所有字符。(如案例一)
使用三个参数,截取从指定索引处指定字符长度的字符。(如案例二)
如果以后没有特殊说明,一般都是指字符长度。目前指字节的只有“ LENGTH?”。
<3> 案例三、
姓名中首字符大写,其他字符小写,用下划线拼接,显示出来。
代码:
SELECT
CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2))) AS out_put
FROM
employees;
执行结果:

?部分解析:

5、instr?
返回子串(substr)在原字符串(str)里面的起始索引。
认识:

如图,我们可以知道,INSTR函数里面有两个参数。
第一个参数是输入的字符串,第二个参数是截取的字符串(子串)。
举例、
?代码:
SELECT
INSTR('新航路开辟','开辟') AS out_put;
执行结果:

?
如果“开辟”这个子串出现了很多遍,那么会显示什么?
我们来看看:

如图,我们可以看见,有两处出现了“开辟”。
分别出现的位置是“2”和“6”,结果显示的是“2”。
说明显示的是第一次出现的子串。?
那如果没有要求显示的子串呢?

我们可以看见,若没有要求显示的子串,执行结果就是0。
总结
?STR函数返回子串第一次出现的索引。
如果找不到,就返回0。
6、trim
认识:

<1> 我们在函数里面放一个大的字符串:
?
?这个看不出来什么,前面的空格像是没有了,后面的空格又像有似的。
其实不是的,是因为单元格的原因,单元格较长。
我们可以加上LENGTH函数来看看长度。
如果只返回字符串的字节长度,就是3*4=12。即没有算空格长度。

?如图,说明该函数去掉了前后空格。
<2> 那如果我们里面写的不是空格呢?

?如图,我们若是想去掉字母a,该怎么办呢?
我们可以在输入的字符前面加上? 'a' from,给它规定一下,这次要去掉的是a。

?可以看见,前后的a都去掉了。
TIRM函数去掉的就是前后的,中间会被认为是有效的字符。
<3> 如果上面我们去掉的是aa呢??

?
我们可以看见,有一个a没有被去掉? 因为它会默认将aa当做一个单元,“细嗅”前面有五个a,就会剩下一个a(没有a与它搭配了),因为不是aa。
7、lpad
用指定的字符实现左填充指定长度。
认识:

?如图我们可以知道,LPAD函数里面的参数有三个。

?如图我们可以知道,“三千世界”占了四个位置,不够10个,左边会以*填充。
用*填充三千世yong 界,总长度是10。
如果指定长度小于字符长度呢?

如图,说明最终长度是和第二个参数,即总共的字符长度一致的。
如果输入的字符长度超过了指定的长度,就会从右边截断。?
8、rpad
用指定的字符实现右填充指定长度。
认识:

?
我们来举个例子:

可以看见,是在右边进行填充的,总长度为12。
9、replace
用于替换。
认识:

?我们可以看到,REPLACE函数有三个参数:输入的字符、被替换的字符、替换的字符。
举个例子:

?我们可以看到,第一个输入字符的“沙僧”都被换成了“猴哥”。
?
(2)数学函数
? ?传入的参数类型是数值型。
(3)日期函数
? ?传入的参数类型是日期型。
(4)其它函数
(5)流程控制函数
? ?可以实现一些分支结构。
好啦~
我们这次说的主要是字符函数,因为篇幅原因,后面的函数要在后面讲解喽~
欢迎继续关注后续内容,原创不易,希望多多支持。
咱们下次不见不散~

?
|