前言
hi~ 欢迎来到我的MySQL笔记系列!本篇主要记录学习MySQL数据库中利用函数处理数据的过程。
我的mysql笔记目录如下~
目录
1.日期函数
日期函数是mysql数据库中提供的一系列关于日期的操作,其中包括日期类型(date、datetime、timestamp)。
-获取日期
获取当前的年月日:
select current_date();
通过获取日期时间用date函数进行筛选日期:
select date(now());
-获取时间
获取当前的时分秒:
select current_time();
-获取时间戳
获取当前的时间戳(timestamp类型在select查询下默认显示为datetime类型的样子):
select current_timestamp();
-日期运算
在一个日期的基础上,进行不同类型的运算:(day-天、second-秒、minute-分、hour-小时、year-年)。其中date_add为加,date_sub是减。
需要注意,date可以是date、datetime类型。如果date类型对其做了time类型的操作(second、minute、hour),会从00:00:00开始转化为哦datetime类型进行运算。
别忘了interval关键字的书写。
datediff(date1, date2)计算出的单位是day,如果传参传的是datetime类型会转化为date类型。
-案例:创建留言表
根据上面的日期函数,我们创建一个留言表,用来统计留言人的时间等属性。
create table if not exists message(
id int unsigned auto_increment primary key,
content varchar(50) not null,
sendtime datetime
);
插入几条数据:
现在我们显示所有留言信息,发布日期只显示日期,不显示时间:
现在插入一些数据,然后显示最近一分钟发布的留言:
select * from message where date_sub(now(), interval 1 minute) < sendtime;
2.字符串函数
在MySQL中,提供了一些对字符串进行操作的函数,具体如下:
下面,我们使用Oracle 9i经典测试表进行测试。(表scott_data.sql 使用source执行便可导入测试数据库)
-获取emp表的ename列的字符集
获取字符集也就是编码格式。
select charset(ename) from emp;
除了字符串,也可以查看数值类型,编码格式是二进制类型的。
charset函数主要就是用来查看对应字符串的编码格式的。如果select查询出来存在乱码,那么一定是编码格式和校验规则不对应问题,所以可以使用此函数进行查看。
-对表emp每个员工信息进行连接
每个记录的员工信息表示如下:xxx员工恭喜你入职我司xxx职位,雇佣时间为xxx工资为xxx,部门编号xxx。
我们可以使用concat将每个字符串连接起来。
select concat(ename, '员工恭喜你入职我司', job, '职位,雇佣时间为', date(hiredate), '工资为', sal, ',部门编号是', deptno) from emp;
可以发现,非str类型同样的可以连接,并且也可以嵌套。
子串和大小写转换
首先是找子串。利用instr(str1, str2)能找到str2在str1中的位置。注意位置是以1下标开始,没有找到就返回0。
寻找的单位是字符,不是byte哦~
另外,我们可以从左边开始提取n个字符组成子串(left(str, n)),也可以从右边开始提取n个字符组成字串(right(str, n));
我们可以利用ucase和lcase将字符串中的小写字符转化为大写,大写字符转换为小写。
比如,我们将emp表中所有员工的名字小写显示出来:
求字符串所占字节数
使用函数length就能计算出长度,但是需要注意单位是byte。
-比如求如下两个字符串所占字节数:(utf-8汉字占字节数为3byte)
替换字符串
使用函数replace(str, str1, str2);就能在str中所有str1的地方替换为str2字符串。
比较两字符串大小
利用函数strcmp(str1, str2)函数,就可以对str1和str2两子串进行比较大小(字典进行比较)。如果str1 > str2 那么返回1,str1 < str2 返回-1,相等返回0。
-以首字母大写,其余小写的形式显示emp表中员工名字
如果要实现题目要求,那么应该将名字分为两部分,第一部分就是首字母,第二部分是后面的部分。而这件事情可以使用函数substring(str, b[, n])进行截取。从b开始,默认截取完,否则截取n个字符形成新的字符串。(注意,第一个字符下标为1)
select concat(ucase(left(ename, 1)), lcase(substring(ename, 2))) from emp;
去掉空格
在有些场景中,比如bash,在有效字符串中前面或者后面带了一些没有用的空格,使用的时候需要去掉(去掉一个字符串的前缀和后缀不需要的空格,字符串中间的空格不会被去掉):
我们可以使用ltrim去掉左边的空格,rtrim去掉右边,trim全部去掉。
3.数学函数
需要注意,向上取整是朝着正无穷取整,向下取整是向负无穷取整。mod负数取模也是可以的哦。
4.其他函数
函数 | 作用 |
---|---|
user(); | 查询当前的用户 |
md5(str); | 对str进行一个字符摘要,是32位字符串 |
database(); | 显示当前正在使用的数据库 |
password(str); | 类似于md5,只不过带*的41位摘要 |
ifnull(val1, val2); | val1为null就返回val2,否则返回val1. |