这章我们主要来学习Mysql数据库当中的运算符和函数,根据功能的不同,可以划分为 以下几种:
(1)字符函数
(2)数值运算符与函数
(3)比较运算符与函数
(4)日期时间函数
(5)信息函数
(6)聚合函数
(7)加密函数
首先我们来看一下字符函数
我们先来看前两个,concat和concat_ws,他们两个的功能都是进行字符的连接,但是他们两个也有区别。
1 我们先来演示第一个函数concat,操作命令及结果如下:
我们发现我们已经将这三个字符连接到了一块,当然更多的字符也可以,这个很简单了。
下面我们在做一个实验,我们先来查看一下user表的信息,我们输入select * from user;
假设我们想把username和age两个字段合到一起,那么我们就可以输入如下命令:
其中as fullname指的意思就是我们把两个字段合并之后取了个别名叫fullname,我们发现结果正是我们想要的。
2 Concat_ws指的是使用指定的分割符进行字符的连接,我们同样做一个演示,我们输入如下命令:
这里要注意他至少需要三个参数,第一个参数指定分隔符,后面的参数表示要连接的字符,至少要两个,所以总共至少要有三个参数,我们发现abc三个字符之间用我们指定的@分隔符连接起来。
3 下面我们来看下一个函数format,功能是进行数字格式化,之所以把这个函数归结到字符函数,主要是因为他的返回结果是字符型,假设我们要将一个数字进行格式化,我们可以输入如下命令:
2表示的是小数点之后保留2位小数,我们从结果可以发现这个数字变成了我们常说的千分位表示形式,就是三位一划分,当然我们也可以将2改为1或0。
4 下面我们再来看一下lower和upper,功能是对字符串大小写的转换,这两个函数比较简单,下面我们简单的做个练习,我们输入select lower(‘DaJiangTai’);
我们发现字符全部转换成小写,upper和lower相反,就是将字符全部转换为大写,大家可以自己练习一下
5 下面再来看一下left和right,功能分别是左侧和右侧字符,他有两个重要参数,分别是从哪个字符开始获取,第二个是获取几个字符,下面我们来演示一下,我们输入select left(‘DaJangTai’,3);
我们发现就截取了前三个字符
下面我们做一个函数嵌套,我们将获取的字符全部转换成小写,我们输入select lower(left(‘DaJiangTai’,3));
我们发现正是我们需要的结果,right和left用法类似,希望大家自己动手练习一下。
6 下面我们看一下length(),获取字符串长度,我们输入select length(‘dajiangtai’);
我们发现长度是10,当然这个很简单,如果中间有一个空格,也会算在字符长度里,比如dajiang tai,
7 接下来的这三个函数主要是用来删除空格,根据字面意思相信大家也一定能够明白,删除前导空格就是删除第一个字符之前的空格,删除后续空格就是删除最后一个字符之后的空格。
下面我们来试一下,我们输入select ltrim(‘ dajiangtai ’);
好,是这样一个结果,那么我们怎么判断我们的空格是否删除了呢?我们可以通过长度length函数,我们输入select length(‘ dajiangtai ’);前面两个空格,后面3个空格,那么长度一共是15。
假设我们加上ltrim,就是select length(ltrim(‘ dajiangtai ’));
我们发现长度变成了13,那么就说明我们删除了前导空格,rtrim和trim的用法也和他一样,其中trim函数除了可以删除前导和后续空格,它还可以删除某些特定的字符串,我们输入select trim(leading ‘@’ from ‘@@@dajiangtai@@@@’);
leading表示删除前导的特定字符,那么删除后续特定字符,我们只需要将leading改为trailing即可,如果要删除所有的特定字符,则只需要改为both即可,那么如果说在dajiangtai中间有特定字符该怎么删除呢,当然她就不行了,我们就需要使用另外一个函数replace,我们输入select replace(‘@@@dajiang@@tai@@@’,’@’,’’);
意思就是将前面那个字符中的@替换成空字符,记着中间不要用空格,我们发现结果正是我们想要的结果.当然也可以换成两个字符,比如把@换成##,当然也可以把两个@换成一个*,这些都是可以的。
8 下面我们来看一下下一个substring,截取字符串,理论上他应该有三个参数,分别是,对哪个字符串截取,从第几个截,截几个。
下面写个例子,我们输入select substring(‘dajiangtai’,3,5);
这里大家要注意,mysql是从1开始编号而不是0开始,这一点大家不要搞混了,还有,如果说我们只写了从第几位取,而没有写取几位,那么系统就会从这一位开始一直取到字符的结尾。
那么如果我输入个负数,会出现什么情况呢?
我们会发现,当我输入负数的时候,它是按照倒序取的,但是这里要注意只能在起始位置取负值,而取多少位则不能用负数。
9 下面我们再来看一下like,就是进行模式的匹配,我们输入select ‘dajiangtai’ like ‘d%’;
这里的%即相当于Windows下的*号,代表0个或多个任意字符,我们发现结果是1,这里的1代表的是true的意思,就是表示dajiangtai和d%的模式是匹配的。
当然这个是最简单的,下面我们演示一个稍微复杂一点的,我们先往user表中插入一条记录,我们输入insert user(username,password) values(‘tom%’,234);
系统提示插入成功,我们输入select * from user;来查看一下。
已经插入成功,假设我现在要查看username中含有a的那个名字,我们输入select * from user where username like ‘%a%’;
我们发现结果正是我们想要的,那么如果我想查名字里面包含%的,我该怎么查,按照常理我们输入select * from user where username like ‘%%%’;其中第一个和第三个代表任意字符,中间那个代表我们要查找的那个特定字符。
我们从结果看,显示所有记录,不是我们想要的结果。系统会把中间的那个%也当成通配符,,那么该如何查找呢,我们可以做一下修改,在中间这个%前面随便加一个字符,比如1,意思就是告诉系统1后面这个%不能按照通配符来解析。后面还要加上escape ‘1’;让系统直接认为是标准的%来解析。
从结果看,这样做就达到了我们的目的,其中通配符除了可以用%来代表任意个字符,还可以用_(下划线)来代表任意一个字符。这就是我们学习的字符函数。