绪论
逐日鼓励:“唯有努力,才能进步”
绪论:
本章是MySQL中常见的函数,利用好函数能很大的资助我们提高MySQL利用服从,也能很好处置惩罚一些情况,如字符串的拼接,字符串的获取,进制的转换以及保存暗码时的加密等等,通过本章你将了解到非常多函数,但有个影响就好,收藏起来到指定场景用到了在来看看就好,下面我将持续更新MySQL,敬请期待~
————————
早关注不迷路,话不多说安全带系好,发车啦(发起电脑观看)。
1. MySQL 中函数的利用场景
在 MySQL 中,函数可以在多个地方利用,包罗但不限于以下几种情况:
- SELECT 语句中的盘算
- 函数可以在 SELECT 查询中用来处置惩罚数据、进行盘算或转换数据。比方:
- SELECT UPPER(name) FROM users;
复制代码
- WHERE 子句
- 可以在 WHERE 子句中利用函数来过滤数据。比方:
- SELECT * FROM users WHERE LENGTH(name) > 5;
复制代码
- ORDER BY 子句
- 函数可以在 ORDER BY 子句中利用来排序数据。比方:
- SELECT * FROM users ORDER BY LOWER(name);
复制代码
- INSERT 语句中
- 在插入数据时,可以利用函数对数据进行处置惩罚。比方:
- INSERT INTO users (name, email) VALUES (UPPER('john'), CONCAT('john', '@example.com'));
复制代码
- UPDATE 语句中
- 在更新数据时,可以利用函数修改字段的值。比方:
- UPDATE users SET email = CONCAT(name, '@example.com') WHERE id = 1;
复制代码
- GROUP BY 子句
- 函数可以在 GROUP BY 子句中利用,尤其是在聚合函数的情况下。比方:
- SELECT UPPER(name), COUNT(*) FROM users GROUP BY UPPER(name);
复制代码
- HAVING 子句
- 在 HAVING 子句中利用函数来对分组后的数据进行进一步的过滤。比方:
- SELECT name, COUNT(*) FROM users GROUP BY name HAVING COUNT(*) > 1;
复制代码
- 视图 (View)
- 函数也可以在视图中利用,对查询结果进行处置惩罚。比方:
- CREATE VIEW user_email_view AS
- SELECT name, CONCAT(name, '@example.com') AS email FROM users;
复制代码
- 存储过程和触发器
- 函数可以在存储过程或触发器中利用进行更复杂的操作。比方:
- DELIMITER //
- CREATE PROCEDURE GetUserInfo(IN user_id INT)
- BEGIN
- SELECT name, CONCAT(name, '@example.com') FROM users WHERE id = user_id;
- END //
- DELIMITER ;
复制代码
- 索引表达式
- 在某些情况下,函数也可以用作索引表达式的一部分,尤其是在天生假造列时。
总结:
MySQL 的函数可以在查询的多个部分利用,包罗数据选择、插入、更新、排序、分组、条件过滤等操作
下述函数将利用select实行,这样能很好的直接提现每个函数的功能,对于一些较为简朴的就不配源码了,直接上实操图,对于不同场景具体分析具体利用!
2. 日期相关的函数
2.1 获取当前日期:current_date
2.2 获取当前时间:current_time
2.3 获取当前时间戳:current_timestamp
是日期 + 时间 (并不是秒数 )
2.4 获取当前时间的函数:now
2.5 从时间中提取时间:date(daetime)
- select date('1949-10-01 00:00:00')
复制代码
2.6 增加时间date_add(date,interval d_value_type)
其中参数:
- date:可以添加日期或时间:
- interval d_value_type:d_value_type数值的单元可以是year、minute、second、day
具体利用如下:
写法为:
- select date_add('2025-01-01',interval 10 day);
- interval + ...
复制代码
而且最终它还会按照日历进行盘算
在日期的基础上减去时间:date_sub
同理:
盘算两个日期之间相差多少天:datediff
利用前者的日期 减去 后者的日期
具体如下:
实操记录生日
- create table tmp(
- id bigint primary key auto_increment,
- birthday date
- );
复制代码 插入时间:
- insert into tmp(birthday) values(1990-01-01);
复制代码 插入数据:
插入的细节:
- 其中current_time / current_date / current_datestamp获取到的数据都可以插入进去(其中 current_time也能重哈如大概有点奇怪但确实可以)
- 但照旧就直接利用,对应的利用,日期就插入日期
实操实现留言板
- 创建表:
- create table msg (
- id bigint primary key auto_increment,
- content varchar(100) not null,
- sendtime datetime
- );
- 插入数据:
- insert into msg(content,sendtime) values('hello1', now());
- insert into msg(content,sendtime) values('hello2', now());
- select * from msg;
复制代码 实现类似留言板的功能(批评),当你发表言论后会记录你到内容和时间。
3. 字符串相关函数
3.1 检察列属性的字符集:charset(string)
- select charset(sal) from emp;
复制代码
还能直接检察(表是提前配置好的)
3.2 拼接字符串 concat(string,…)
将传递进来的参数都当作字符串,然后拼接。
3.3 字符串中查找字符串 instr(string,substring)
不存在返回0,存在返回位置(从1开始的位置)
3.4 将string中大小写转换 ucase / lcase(string)
3.5 从左端提取len个字符 left(string,len)
同样的另有对应的 right(string,len) 从右端开始往左取len个字符
具体操作如下图:
还剩一些如下图:
3.6 concat 函数实操
要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分。
其中可以利用select进行筛选
但发现并不太优雅,现在必要通过全字符串的情势展示:
那么就是利用前面的concat函数:将获取的数据拼接成字符串
3.7 获取字符串长度 length
求门生表中门生姓名占用的字节数
其中length求的是字节数,当求字符长度时,如汉字时就会算出来汉字所占的字节数
其中下图:汉字两个共6byte(一个汉字3byte),三个数字各占1字节(3byte)
3.8 在字符串中进行字符串的替换 replace
- replace(str,search_str,replace_str);
- str:所要查找的str
- search_str:查找的字符串
- replace_str:查找后进行替换的字符串
复制代码 先查找查找到后进行替换
此处的替换仅仅只是检察,并不是真正的在数据进行替换
3.9 字符串截取 substring
- substring(colum,pos,len);
- 若len不写默认从pos截取剩下所有
复制代码
3.10 以首字母小写的方式显示所有员工的姓名 实操
- select ename ,concat(lcase(substring(ename,1,1)),substring(ename,2))from emp;
复制代码
3.11 去除字符串中最开始和末了的空格 trim
ltrim:只去除最开始的(最左边的)、rtrim:只去除末了的(右边的)
用于:在对用户信息数据的保存时先进行去除空格操作,也就是网络传输后进行排除字符串,防止在网络传输过程中的出现添加了看不见的空字符,我们必要将其删除后再存进数据库中,不然假设有空格的话,如当用户再次输入自己的用户暗码时会由于空格的原因导致无法登录,而且这种问题非常难以排查。
4. 数学函数
4.1 abs 取绝对值
4.2 bin 转二进制
简朴就不写了
4.3 hex 转十六进制
3.3 conv 进制转换
- select conv(number,fromm_base,to_base);
- 将数字number,从from_base进制 转换成 to_base进制
复制代码
4.5 format 格式化,保留小数
- select(number,dicimal_places);
复制代码
4.7 mod 取模
4.8 random天生随机数
天生的数是从 0.0 ~ 1.0,当我们想要天生指定范围的我们就直接 * 10n即可实现(如 * 10的话就是 0 ~ 10)
其中还能嵌套函数利用,当我们将format和rand嵌套利用的话就能天生整数的随机数:
4.9 ceiling 向上取整
0向取整:
对于任何小数取整时都直接去除小数(如-14.1 = -14 、22.8 = 22)
那么向上取整的意思是:对于任何浮点数来说都按大取整(为啥叫向上取整见下图:)
取整情况为:3.1 取整为 4、-3.9 取整为 -3
实操图如下:
4.10 floor 向下取整(一般语言中用的比力多)
反之就是向下取整,就是将所有小数按小的方向取整
再如上图举例:-3.1 取整为 -4,3.9 取整为 3
实操如下图:
5. 一些其他函数
5.1 检察当前用户 user
5.2 database检察当前数据库
5.3 md5 加密
常用于加密暗码:
由于暗码在现实工作中一般是不直接在数据库中明文存储的,其中md5加密后酿成一个32位的哈希值。
创建一个表用于测试:
也就是说当完成在插入过程中对暗码利用md5进行加密然后再插入:
当我们查询时,由于内部存储的暗码是md5加密的,所以查询时判断的暗码也必要进行md5,这样才能正常的查询到。
5.4 password 设置暗码
password是MySQL内部也设定了的函数,它专门用于设置暗码,同样也会天生一个等长的字符串(一般也常用这个来进行设置)
5.5 ifnull(val1,val2)
如果val1为空就返回val2,若val1不为空则就直接返回val1了
也非常好明白就不写sql了,直接上实操图:
本章完。预知后事怎样,暂听下回分解。
如果有任何问题欢迎讨论哈!
如果觉得这篇文章对你有所资助的话点点赞吧!
持续更新大量MySQL细致内容,早关注不迷路。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |