前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【MySQL基础篇】七、内置函数

【MySQL基础篇】七、内置函数

作者头像
利刃大大
发布于 2025-05-21 03:53:03
发布于 2025-05-21 03:53:03
6700
代码可运行
举报
文章被收录于专栏:csdn文章搬运csdn文章搬运
运行总次数:0
代码可运行

Ⅰ. 日期函数

​ 上面的操作比较简单,这里就不演示了!

案例一

​ 首先创建一张表,记录生日:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create table tmp(
    id int primary key auto_increment,
    birthday date
);

​ 然后添加当前日期:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> insert into tmp (birthday) values(current_date());
Query OK, 1 row affected (0.01 sec)

mysql> select * from tmp;
+----+------------+
| id | birthday   |
+----+------------+
|  1 | 2023-08-01 |
|  2 | 2023-08-01 |
+----+------------+
2 rows in set (0.00 sec)
案例二

​ 我们这里创建一张用来记录留言的表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create table msg (
    id int primary key auto_increment,
    content varchar(30) not null,
    sendtime datetime
);

​ 然后插入数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> insert into msg(content, sendtime) values('hello', now());
Query OK, 1 row affected (0.00 sec)

mysql> insert into msg(content, sendtime) values('bye~', current_timestamp());
Query OK, 1 row affected (0.00 sec)

mysql> select * from msg;
+----+---------+---------------------+
| id | content | sendtime            |
+----+---------+---------------------+
|  1 | hello   | 2023-08-01 15:13:04 |
|  2 | bye~    | 2023-08-01 15:13:28 |
+----+---------+---------------------+
2 rows in set (0.00 sec)

​ 而当我们想要查找特定时间比如五分钟内发布的留言,可以按如下操作使用 date_add() 函数或者 date_sub() 函数都行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select content, sendtime from msg where date_add(sendtime, interval 5 minute) > now();
+---------+---------------------+
| content | sendtime            |
+---------+---------------------+
| hello   | 2023-08-01 15:13:04 |
| bye~    | 2023-08-01 15:13:28 |
+---------+---------------------+
2 rows in set (0.00 sec)

Ⅱ. 字符串函数

常见字符串函数

​ 下面结合案例来学习这几个函数!并且下面使用的案例表是在表的增删查改那个笔记中设定的。

使用案例

1、显示对应的字符集 – charset
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select charset('s');
+--------------+
| charset('s') |
+--------------+
| utf8         |
+--------------+
1 row in set (0.00 sec)

mysql> select charset('中国');
+-------------------+
| charset('中国')   |
+-------------------+
| utf8              |
+-------------------+
1 row in set (0.00 sec)

mysql> select charset(ename) from emp;
+----------------+
| charset(ename) |
+----------------+
| utf8           |
| utf8           |
| utf8           |
| utf8           |
| utf8           |
+----------------+
14 rows in set (0.00 sec)
2、要求显示 exam_result 表中的信息,显示格式:“XXX 的语文是 XXX 分,数学 XXX 分,英语 XXX 分” – concat
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select concat(name,'的语文是',chinese,'分,数学是',math,'分,英语是',english,'分') 分数 from exam_result;
+--------------------------------------------------------------+
| 分数                                                         |
+--------------------------------------------------------------+
| 唐三藏的语文是67分,数学是98分,英语是56|
| 孙悟空的语文是87分,数学是78分,英语是77|
| 猪悟能的语文是88分,数学是98分,英语是90|
| 曹孟德的语文是82分,数学是84分,英语是67|
| 刘玄德的语文是55分,数学是85分,英语是45|
| 孙权的语文是70分,数学是73分,英语是78|
| 宋公明的语文是75分,数学是65分,英语是30|
+--------------------------------------------------------------+
7 rows in set (0.00 sec)
3、求学生表中学生姓名占用的字节数 – length
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select name,length(name) from exam_result;
+-----------+--------------+
| name      | length(name) |
+-----------+--------------+
| 唐三藏    |            9 |
| 孙悟空    |            9 |
| 猪悟能    |            9 |
| 曹孟德    |            9 |
| 刘玄德    |            9 |
| 孙权      |            6 |
| 宋公明    |            9 |
+-----------+--------------+
7 rows in set (0.00 sec)

​ 注意:length() 函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数;如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数。(这与字符集编码有关)

4、将 emp 表中所有名字中有 S 的替换成 ‘上海’ – replace
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select ename, replace(ename, 'S', '上海') from emp;
+--------+-------------------------------+
| ename  | replace(ename, 'S', '上海')   |
+--------+-------------------------------+
| SMITH  | 上海MITH                      |
| ALLEN  | ALLEN                         |
| WARD   | WARD                          |
| JONES  | JONE上海                      |
| MARTIN | MARTIN                        |
| BLAKE  | BLAKE                         |
| CLARK  | CLARK                         |
| SCOTT  | 上海COTT                      |
| KING   | KING                          |
| TURNER | TURNER                        |
| ADAMS  | ADAM上海                      |
| JAMES  | JAME上海                      |
| FORD   | FORD                          |
| MILLER | MILLER                        |
+--------+-------------------------------+
14 rows in set (0.00 sec)
5、截取 emp 表中 ename 字段的第二个到第三个字符 – substring
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select ename, substring(ename, 2, 2) from emp;
+--------+------------------------+
| ename  | substring(ename, 2, 2) |
+--------+------------------------+
| SMITH  | MI                     |
| ALLEN  | LL                     |
| WARD   | AR                     |
| JONES  | ON                     |
| MARTIN | AR                     |
| BLAKE  | LA                     |
| CLARK  | LA                     |
| SCOTT  | CO                     |
| KING   | IN                     |
| TURNER | UR                     |
| ADAMS  | DA                     |
| JAMES  | AM                     |
| FORD   | OR                     |
| MILLER | IL                     |
+--------+------------------------+
14 rows in set (0.00 sec)
6、以首字母小写的方式显示所有员工的姓名 – lcase

​ 这里的要求是首字母小写而已,所以我们想要做一下截取和拼接,也就是配合前面的 concat()substring()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select ename, concat(lcase(substring(ename, 1, 1)), substring(ename, 2)) from emp;
+--------+------------------------------------------------------------+
| ename  | concat(lcase(substring(ename, 1, 1)), substring(ename, 2)) |
+--------+------------------------------------------------------------+
| SMITH  | sMITH                                                      |
| ALLEN  | aLLEN                                                      |
| WARD   | wARD                                                       |
| JONES  | jONES                                                      |
| MARTIN | mARTIN                                                     |
| BLAKE  | bLAKE                                                      |
| CLARK  | cLARK                                                      |
| SCOTT  | sCOTT                                                      |
| KING   | kING                                                       |
| TURNER | tURNER                                                     |
| ADAMS  | aDAMS                                                      |
| JAMES  | jAMES                                                      |
| FORD   | fORD                                                       |
| MILLER | mILLER                                                     |
+--------+------------------------------------------------------------+
14 rows in set (0.00 sec)

Ⅲ. 数学函数

​ 这里只要举 conv()mod() 函数的使用例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 转化进制函数
mysql> select conv(10, 10, 16);
+------------------+
| conv(10, 10, 16) |
+------------------+
| A                |
+------------------+
1 row in set (0.00 sec)

mysql> select conv(10, 10, 2);
+-----------------+
| conv(10, 10, 2) |
+-----------------+
| 1010            |
+-----------------+
1 row in set (0.00 sec)


-- 求余数函数
mysql> select mod(10, 2);
+------------+
| mod(10, 2) |
+------------+
|          0 |
+------------+
1 row in set (0.00 sec)

mysql> select mod(10, 3);
+------------+
| mod(10, 3) |
+------------+
|          1 |
+------------+
1 row in set (0.00 sec)

Ⅳ. 其它常见函数

1、user()

​ 用于查询当前的用户:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select user();
+--------+
| user() |
+--------+
| root@  |
+--------+
1 row in set (0.00 sec)
2、md5(str)

​ 这个函数是一个常见的哈希函数,用于将输入字符串转换为 128 位的哈希值,也就是对一个字符串进行 md5 摘要,摘要后得到一个 32 位字符串,这是一种加密方式!相同的字符串,其 md5 编码是一样的

MD5 算法是单向的,不可逆的,这意味着 无法通过哈希值还原原始字符串。在 mysql 中,MD5() 函数可以用于加密字符串,但它 不是专门用于密码加密的函数

​ 需要注意的是,使用 MD5() 函数加密密码并不是一种安全的做法,因为 MD5 算法已经被证明存在一些弱点,容易受到暴力破解和彩虹表攻击。为了更好地保护密码,推荐使用更安全的哈希算法,如 SHA-256,并结合使用盐值来增加密码的复杂性和安全性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select md5('liren');
+----------------------------------+
| md5('liren')                     |
+----------------------------------+
| c9ad4aedb509ccd1d92931ef904c88b4 |
+----------------------------------+
1 row in set (0.00 sec)

mysql> select md5('liren');
+----------------------------------+
| md5('liren')                     |
+----------------------------------+
| c9ad4aedb509ccd1d92931ef904c88b4 |
+----------------------------------+
1 row in set (0.00 sec)

mysql> select md5('中国');
+----------------------------------+
| md5('中国')                      |
+----------------------------------+
| c13dceabcb143acd6c9298265d618a9f |
+----------------------------------+
1 row in set (0.00 sec)
3、database()

​ 显示当前正在使用的数据库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select database();
+------------+
| database() |
+------------+
| scott      |
+------------+
1 row in set (0.00 sec)
4、password()

mysql 数据库通常使用该函数对用户加密,只有相同的字符串,它们加密后的编码才是一样的!

​ 它使用了一个特定的算法,称为 mysql加密算法该算法是不可逆的,这意味着无法通过解密函数来还原原始密码。PASSWORD() 函数在 MySQL 4.1 版本之前是默认的密码加密函数,但在之后的版本中被弃用,不再是默认的加密方式。

password() 函数是 mysql 特有的密码加密函数,而 MD5() 函数是一个常见的哈希函数,可以用于加密字符串,但不推荐用于密码加密。

​ 此外还有一个细节,我们使用了 password 字眼的时候,在 mysql 中再使用上方向键回滚的时候会发现找不到刚才的带有 password 字眼的语句,说明 mysql 其实对我们输入的指令做了一些优化,涉及到例如 password 等敏感字眼,那么我们在回滚的时候是看不到该语句的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select password('liren');
+-------------------------------------------+
| password('liren')                         |
+-------------------------------------------+
| *A56DBAEC100FD8FCBB73DF6C44002D472C047746 |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> select password('liren');
+-------------------------------------------+
| password('liren')                         |
+-------------------------------------------+
| *A56DBAEC100FD8FCBB73DF6C44002D472C047746 |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)
5、ifnull(val1, val2)

​ 如果 val1null,则返回 val2,否则返回 val1 的值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select ifnull(1, 2);
+--------------+
| ifnull(1, 2) |
+--------------+
|            1 |
+--------------+
1 row in set (0.00 sec)

mysql> select ifnull(null, 2);
+-----------------+
| ifnull(null, 2) |
+-----------------+
|               2 |
+-----------------+
1 row in set (0.00 sec)

实战OJ

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【MySQL基础篇重点】八、复合查询
​ 前面我们学习的 mysql 表的查询都是对一张表进行查询,在实际开发中这远远不够,所以我们就需要学习下面的复合查询!
利刃大大
2025/05/21
1450
【MySQL基础篇重点】八、复合查询
MySQL数据库:内置函数
2.创建一个留言表,插入相关数据。①显示所有留言信息,发布日期只显示日期,不用显示时间②查询在2分钟内发布的帖子。
二肥是只大懒蓝猫
2023/10/13
2990
MySQL数据库:内置函数
MySQL:表的内置函数
注意:length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数;如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数(与字符集编码有关)
小灵蛇
2024/12/13
1700
MySQL:表的内置函数
MySQL 多表查询与复杂查询技巧实战
实际开发中往往数据来自不同的表,所以需要多表查询。本节我们用一个简单的公司管理系统,有三张表EMP,DEPT,SALGRADE来演示如何进行多表查询。
用户11286421
2025/03/24
2200
MySQL 多表查询与复杂查询技巧实战
【MySQL基础篇】十二、视图的概念与操作
​ 在 MySQL 中,"视图"是一种 虚拟表,它是基于一个或多个数据库表的查询结果。视图 并不实际存储数据,而是存储了一个查询的定义(即 select 语句),每当查询视图时,实际的数据都是从基础表中获取的。
利刃大大
2025/05/22
1120
【MySQL基础篇】十二、视图的概念与操作
数据库MySQL学习——内含34道MySQL练习题及答案
DML(数据操作语言):insert delete update,对表中数据进行增删改
全栈程序员站长
2022/09/30
3.4K0
【MYSQL】内置函数
青衫哥
2023/12/06
2880
【MYSQL】内置函数
【MySql】内置函数
注意:length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数;如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数(与字符集编码有关)
平凡的人1
2023/10/15
2910
【MySql】内置函数
SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)
--======================================================
Leshami
2018/08/07
5190
【MySQL】内置函数
如上图,只要 sendtime + 2 min 的时间比现在的时间大即是 2 min 内发布的贴子,所以对应的 SQL 语句为:
YoungMLet
2024/03/01
1950
【MySQL】内置函数
SQL 层级查询(一)
相信大家在工作中都遇到过存在层次关系的数据表,典型的例子诸如菜单表(多级菜单)、用户表(拥有上下级关系)、商品类目表(多级类目)。
白日梦想家
2020/12/14
3K0
【MySQL】函数 & 复合查询 & 内外连接
【案例】:基于我们上面 Retrieve 那建的表 exam_result,同样这里只写指令,不写结果
IsLand1314
2025/05/23
1490
【MySQL】函数 & 复合查询 & 内外连接
Mysql内置函数篇
猫咪-9527
2025/03/27
940
Mysql内置函数篇
MySQL内置函数
date(datetime),datetime可以是各种日期,也可以是上述的各类函数,最终得到的是所述内容中的日期部分。
每天都要进步呀
2023/10/16
2240
MySQL内置函数
MySQL-函数
Select count(*) | count(列名) from table_name [WHERE where_definition]
用户9615083
2022/12/25
7610
MySQL-函数
如何在SQL中高效使用聚合函数、日期函数和字符串函数:实用技巧与案例解析
语法:select column1, column2, .. from table group by column; 案例:
用户11286421
2025/03/22
1650
如何在SQL中高效使用聚合函数、日期函数和字符串函数:实用技巧与案例解析
SQL基础-->多表查询
但要注意where 不要省了,省略where 即为笛卡尔集,而且where 条件要有效,
Leshami
2018/08/07
1.2K0
oracle的listagg函数_oracle的listagg函数
大家好,又见面了,我是你们的朋友全栈君。 Oracle11.2新增了LISTAGG函数,可以用于字符串聚集,测试如下: 1,版本 SQL> select * from v$version; BANNER ——————————————————————————– Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production PL/SQL Release 11.2.0.1.0 – Production CORE 11.2.0.1.0 Production TNS for Linux: Version 11.2.0.1.0 – Production NLSRTL Version 11.2.0.1.0 – Production 2,测试数据 SQL> SQL> select empno,ename,deptno from scott.emp; EMPNO ENAME DEPTNO —– ———- —— 7369 SMITH 20 7499 ALLEN 30 7521 WARD 30 7566 JONES 20 7654 MARTIN 30 7698 BLAKE 30 7782 CLARK 10 7788 SCOTT 20 7839 KING 10 7844 TURNER 30 7876 ADAMS 20 7900 JAMES 30 7902 FORD 20 7934 MILLER 10 14 rows selected 3,作为聚集函数 SQL> SELECT deptno, 2 LISTAGG(ename, ‘,’) WITHIN GROUP(ORDER BY ename) AS employees 3 FROM scott.emp 4 GROUP BY deptno; DEPTNO EMPLOYEES —— ——————————————————————————– 10 CLARK,KING,MILLER 20 ADAMS,FORD,JONES,SCOTT,SMITH 30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD SQL> –更换排序列 SQL> SELECT deptno, 2 LISTAGG(ename, ‘,’) WITHIN GROUP(ORDER BY hiredate) AS employees 3 FROM scott.emp 4 GROUP BY deptno; DEPTNO EMPLOYEES —— ——————————————————————————– 10 CLARK,KING,MILLER 20 SMITH,JONES,FORD,SCOTT,ADAMS 30 ALLEN,WARD,BLAKE,TURNER,MARTIN,JAMES –order by必须存在 SQL> SELECT deptno, 2 LISTAGG(ename, ‘,’) WITHIN GROUP() AS employees 3 FROM scott.emp 4 GROUP BY deptno; SELECT deptno, LISTAGG(ename, ‘,’) WITHIN GROUP() AS employees FROM scott.emp GROUP BY deptno ORA-30491: ORDER BY 子句缺失 SQL> SELECT deptno, 2 LISTAGG(ename, ‘,’) WITHIN GROUP(order by null) AS employees 3 FROM scott.emp 4 GROUP BY deptno; DEPTNO EMPLOYEES —— ——————————————————————————– 10 CLARK,KING,MILLER 20 ADAMS,FORD,JONES,SCOTT,SMITH 30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD ==〉按字母顺序排列 4,LISTAGG作为分析函数使用 SQL> SELECT empno, 2 ename, 3 deptno, 4 LISTAGG(ename, ‘,’) WITHIN GROUP(ORDER BY ename) over(partition by deptno) AS employees 5 FROM sco
全栈程序员站长
2022/10/04
9880
SQL基础-->过滤和排序
--=======================================
Leshami
2018/08/07
7300
listagg小记录[通俗易懂]
listagg的作用是将分组范围内的所有行特定列的记录加以合并成行。函数签名中的measure_expr为分组中每个列的表达式,而delimiter为合并分割符。如果delimiter不设置的话,就表示无分割符。
全栈程序员站长
2022/10/03
6850
相关推荐
【MySQL基础篇重点】八、复合查询
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档