首页 > 数据库 >【基础篇】七、MySQL内置函数

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

时间:2025-01-03 13:30:04浏览次数:3  
标签:内置 函数 0.00 MySQL set sec mysql select

文章目录

Ⅰ. 日期函数

在这里插入图片描述

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

案例一

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

create table tmp(
    id int primary key auto_increment,
    birthday date
);

​ 然后添加当前日期:

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)

案例二

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

create table msg (
    id int primary key auto_increment,
    content varchar(30) not null,
    sendtime datetime
);

​ 然后插入数据:

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() 函数都行:

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

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

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

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

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

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()

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() 函数的使用例子:

-- 转化进制函数
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()

​ 用于查询当前的用户:

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,并结合使用盐值来增加密码的复杂性和安全性。

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()

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

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 等敏感字眼,那么我们在回滚的时候是看不到该语句的

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 的值:

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

标签:内置,函数,0.00,MySQL,set,sec,mysql,select
From: https://blog.csdn.net/lirendada/article/details/144908080

相关文章

  • 实践项目-数据库主从高可用(MySQL-MHA、ProxySQL、Backup)
    (250103)实践目标备份策略:定期全量备份和增量备份,备份文件异地存储。恢复测试:定期在测试库上恢复备份,确保备份文件可用。权限管理:严格控制数据库访问权限,避免误操作。变更管理:所有数据库变更需经过审批,并在非高峰时段执行。监控告警:实时监控数据库状态,设置告警机制,及时发现......
  • 函数vlookup对比相同数据的操作方法
    第一步:同时打开EXCEL表1和表2第二步:在对比目标旁边,输入=vlookup函数,此时会弹出此函数框,双击选择此函数第三步:选择第一个表1中,希望匹配的列,单击选择B列第四步:输入一个半角逗号【,】注意:此时我们不需要操作鼠标,直接输入逗号即可。效果如下图第五步:输入完半角逗号【,】后,我......
  • 最新MySQL面试题(2025超详细版)
    2025最新超详细MySQL面试题文章目录2025最新超详细MySQL面试题@[toc]一、SQL和基本操作1.SQL的执行顺序2.如何优化MySQL查询3.常用的聚合函数4.数据库事务5.事务的四大特性(ACID)6.视图7.MySQL中使用LIMIT子句进行分页8.MySQL中使用变量和用户定义的函数9.My......
  • MySQL优化--插入数据优化和主键优化
    一、插入数优化(insert)平时我们插入数据的时候一般都是一个语句插一个数据,如下所示:insertintotb_testvalues(1,'tom');insertintotb_testvalues(2,'cat');insertintotb_testvalues(3,'jerry');如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行优......
  • opencv computeCorrespondEpilines函数
    cv::computeCorrespondEpilines函数在OpenCV中用于计算对应点的极线。这在立体视觉中非常重要,因为它可以帮助我们确定一对立体图像中对应点的匹配关系。函数原型voidcv::computeCorrespondEpilines(InputArraypoints,intmode,InputArrayF,OutputArra......
  • MySQL索引优化-Count优化、limit优化、Update优化
    一、limit优化这里我有一张表tb_sku里面有400w条数据,以这个表作为案例对象在数据量比较大时,如果进行 limit 分页查询,在查询时,越往后,分页查询效率越低。我们一起来看看执行 limit 分页查询耗时对比:1. 未优化案例(1)查询起始索引0后面10条记录select*fromtb_skuli......
  • 数据库MYSQL的学习
    数据库MYSQL笔记1.对库的操作createdatabasedb_itheima1charsetutf8;        #创建数据库,设置编码方式 showcreatedatabasedb_itheima1;        #查看数据库的建库信息 showcreatetable表名;                    #查......
  • Redis,MongoDB,MySQL,ES之间的区别与适用场景
    Redis,MongoDB,MySQL,ES之间的区别与适用场景:redis是一种高性能键值存储数据库,基于内存操作,支持数据持久化,支持数据类型丰富(如:字符串,哈希,列表,集合,有序集合等),redis还提供了订阅/发布,事务,lua脚本,主从同步等功能,适用于访问频繁,数据量较小,对性能要求比较高的业务场景,如缓存,队列,计数......
  • 《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装
    @目录8.Docker常规安装简介8.1docker常规安装总体步骤8.2安装tomcat8.3安装mysql8.3.1dockerhub上面查找mysql镜像8.3.2从dockerhub上(阿里云加速器)拉取mysql镜像到本地标签为5.78.3.3使用mysql5.7镜像创建容器(也叫运行镜像)简单版实战版8.4安装redis8.5安装nginx本人......
  • 在FreeRTOS中使用HAL_UART_Transmit函数时
    voidSeria2_Printf(char*format,...){ charString[200]; va_listarg; va_start(arg,format); vsprintf(String,format,arg); va_end(arg); HAL_UART_Transmit(&huart2,(uint8_t*)&String,strlen(String),HAL_MAX_DELAY);}在FreeRTOS中使用HAL_UART_Tra......