6-MySQL_表的内置函数

✨✨ 欢迎大家来到小伞的大讲堂✨✨

🎈🎈养成好习惯,先赞后看哦~🎈🎈

所属专栏:MySQL**
小伞的主页:xiaosan_blog**

gitee:************************************************************许星让 (xu-xingrang) - Gitee.com****************************************************************

制作不易!点个赞吧!!谢谢喵!!

1.日期函数

1.1 获取日期函数

bash 复制代码
获得年月日
mysql> select current_date();
+----------------+
| current_date() |
+----------------+
| 2026-03-18     |
+----------------+
1 row in set (0.00 sec)

获得时分秒
mysql> select current_time();
+----------------+
| current_time() |
+----------------+
| 18:07:07       |
+----------------+
1 row in set (0.00 sec)

获得时间戳
mysql> select current_timestamp();
+---------------------+
| current_timestamp() |
+---------------------+
| 2026-03-18 18:07:17 |
+---------------------+
1 row in set (0.00 sec)

获取datetime参数的日期部分
mysql> select date(current_timestamp());
+---------------------------+
| date(current_timestamp()) |
+---------------------------+
| 2026-03-18                |
+---------------------------+
1 row in set (0.00 sec)

1.2 日期计算

bash 复制代码
日期的基础上加上时间
mysql> select date_add('2020-10-10',interval 10 day);
+----------------------------------------+
| date_add('2020-10-10',interval 10 day) |
+----------------------------------------+
| 2020-10-20                             |
+----------------------------------------+
1 row in set (0.00 sec)

日期的基础上减去时间
mysql> select date_sub('2020-10-10',interval 10 day);
+----------------------------------------+
| date_sub('2020-10-10',interval 10 day) |
+----------------------------------------+
| 2020-09-30                             |
+----------------------------------------+
1 row in set (0.00 sec)

获取日期之间相差多少
mysql> select datediff('2020-10-10','2019-10-10');
+-------------------------------------+
| datediff('2020-10-10','2019-10-10') |
+-------------------------------------+
|                                 366 |
+-------------------------------------+
1 row in set (0.00 sec)

案例1:

注意current_time插入date类型的参数时,会转变成当前日期

bash 复制代码
mysql> insert into tmp(birthday) values(current_date());
Query OK, 1 row affected (0.00 sec)

mysql> insert into tmp(birthday) values(current_time());
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from tmp;
+----+------------+
| id | birthday   |
+----+------------+
|  1 | 2026-03-18 |
|  2 | 2026-03-18 |
+----+------------+
2 rows in set (0.00 sec)

案例2:

我们发留言时,我们的评论会附带显示日期

bash 复制代码
创建留言
mysql> create table msg(
    -> id int primary key auto_increment,
    -> content varchar(30) not null,
    -> sendtime datetime);
Query OK, 0 rows affected (0.00 sec)

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

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

mysql> select * from msg;
+----+---------+---------------------+
| id | content | sendtime            |
+----+---------+---------------------+
|  1 | hello1  | 2026-03-18 18:20:07 |
|  2 | hello2  | 2026-03-18 18:20:10 |
+----+---------+---------------------+
2 rows in set (0.00 sec)
查询两分钟内的留言
mysql> select * from msg where date_add(sendtime,interval 2 minute) > now();
+----+---------+---------------------+
| id | content | sendtime            |
+----+---------+---------------------+
|  1 | hello1  | 2026-03-18 18:20:07 |
|  2 | hello2  | 2026-03-18 18:20:10 |
+----+---------+---------------------+
2 rows in set (0.00 sec)

2. 字符串函数

2.1 charset 返回字符串字符集

bash 复制代码
mysql> select charset(name) from students;
+---------------+
| charset(name) |
+---------------+
| utf8          |
| utf8          |
| utf8          |
| utf8          |
+---------------+
4 rows in set (0.00 sec)

2.2 concat连接字符串

bash 复制代码
mysql> select concat(name,'的语文是',chinese,'分,数学是',math,'分,英语是',english,'分') as '分数' from exam_result;
+-----------------------------------------------------------+
| 分数                                                      |
+-----------------------------------------------------------+
| 唐三藏的语文是67分,数学是98分,英语是56分                  |
| 猪悟能的语文是88分,数学是98分,英语是90分                  |
| 曹孟德的语文是70分,数学是90分,英语是67分                  |
| 刘玄德的语文是55分,数学是115分,英语是45分                 |
| 孙权的语文是70分,数学是73分,英语是78分                    |
| 宋公明的语文是75分,数学是95分,英语是30分                  |
+-----------------------------------------------------------+
6 rows in set (0.00 sec)

2.3 length计算string的长度

bash 复制代码
mysql> select length(name) ,name from exam_result;
+--------------+-----------+
| length(name) | name      |
+--------------+-----------+
|            9 | 唐三藏    |
|            9 | 猪悟能    |
|            9 | 曹孟德    |
|            9 | 刘玄德    |
|            6 | 孙权      |
|            9 | 宋公明    |
+--------------+-----------+
6 rows in set (0.00 sec)

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

2.4 replace替换字符

bash 复制代码
mysql> select * from emp;
+--------+--------+-----------+------+---------------------+---------+---------+--------+
| empno  | ename  | job       | mgr  | hiredate            | sal     | comm    | deptno |
+--------+--------+-----------+------+---------------------+---------+---------+--------+
| 007369 | SMITH  | CLERK     | 7902 | 1980-12-17 00:00:00 |  800.00 |    NULL |     20 |
| 007499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 00:00:00 | 1600.00 |  300.00 |     30 |
| 007521 | WARD   | SALESMAN  | 7698 | 1981-02-22 00:00:00 | 1250.00 |  500.00 |     30 |
| 007566 | JONES  | MANAGER   | 7839 | 1981-04-02 00:00:00 | 2975.00 |    NULL |     20 |
| 007654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 00:00:00 | 1250.00 | 1400.00 |     30 |
| 007698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 00:00:00 | 2850.00 |    NULL |     30 |
| 007782 | CLARK  | MANAGER   | 7839 | 1981-06-09 00:00:00 | 2450.00 |    NULL |     10 |
| 007788 | SCOTT  | ANALYST   | 7566 | 1987-04-19 00:00:00 | 3000.00 |    NULL |     20 |
| 007839 | KING   | PRESIDENT | NULL | 1981-11-17 00:00:00 | 5000.00 |    NULL |     10 |
| 007844 | TURNER | SALESMAN  | 7698 | 1981-09-08 00:00:00 | 1500.00 |    0.00 |     30 |
| 007876 | ADAMS  | CLERK     | 7788 | 1987-05-23 00:00:00 | 1100.00 |    NULL |     20 |
| 007900 | JAMES  | CLERK     | 7698 | 1981-12-03 00:00:00 |  950.00 |    NULL |     30 |
| 007902 | FORD   | ANALYST   | 7566 | 1981-12-03 00:00:00 | 3000.00 |    NULL |     20 |
| 007934 | MILLER | CLERK     | 7782 | 1982-01-23 00:00:00 | 1300.00 |    NULL |     10 |
+--------+--------+-----------+------+---------------------+---------+---------+--------+
14 rows in set (0.00 sec)

mysql> select replace(ename,'S','北京'),ename from emp;
+-----------------------------+--------+
| replace(ename,'S','北京')   | ename  |
+-----------------------------+--------+
| 北京MITH                    | SMITH  |
| ALLEN                       | ALLEN  |
| WARD                        | WARD   |
| JONE北京                    | JONES  |
| MARTIN                      | MARTIN |
| BLAKE                       | BLAKE  |
| CLARK                       | CLARK  |
| 北京COTT                    | SCOTT  |
| KING                        | KING   |
| TURNER                      | TURNER |
| ADAM北京                    | ADAMS  |
| JAME北京                    | JAMES  |
| FORD                        | FORD   |
| MILLER                      | MILLER |
+-----------------------------+--------+
14 rows in set (0.00 sec)

2.5 ucase与lcase转换大小写

bash 复制代码
mysql> select lcase(ename),ename from emp;
+--------------+--------+
| lcase(ename) | ename  |
+--------------+--------+
| 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)

mysql> select ucase(lcase(ename)),ename from emp;
+---------------------+--------+
| ucase(lcase(ename)) | ename  |
+---------------------+--------+
| 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)

2.6 substring 截取length个字符

bash 复制代码
以首字母小写的方式显示所有员工的姓名
mysql> select concat(lcase(substring(ename,1,1)),substring(ename,2)) ,ename from emp;
+--------------------------------------------------------+--------+
| concat(lcase(substring(ename,1,1)),substring(ename,2)) | ename  |
+--------------------------------------------------------+--------+
| 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)

2.7 ltrim、trim、rtrim去除前后空格

bash 复制代码
mysql> select ltrim('      hello!       ') ltrim,trim('       hello!       ') trim , rtrim('       hello!      ') rtrim;
+---------------+--------+---------------+
| ltrim         | trim   | rtrim         |
+---------------+--------+---------------+
| hello!        | hello! |        hello! |
+---------------+--------+---------------+
1 row in set (0.00 sec)

3. 数学函数

3.1 abs绝对值

bash 复制代码
mysql> select abs(-1),abs(1.1);
+---------+----------+
| abs(-1) | abs(1.1) |
+---------+----------+
|       1 |      1.1 |
+---------+----------+
1 row in set (0.00 sec)

3.2 bin、hex进制的转换

bash 复制代码
mysql> select bin(10),hex(10);
+---------+---------+
| bin(10) | hex(10) |
+---------+---------+
| 1010    | A       |
+---------+---------+
1 row in set (0.00 sec)

3.3 conv任意进制的转换

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

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

3.4 ceiling向上取整、floor向下取整

bash 复制代码
mysql> select ceiling(23.04),floor(23.7);
+----------------+-------------+
| ceiling(23.04) | floor(23.7) |
+----------------+-------------+
|             24 |          23 |
+----------------+-------------+
1 row in set (0.00 sec)

3.5 format格式化保留小数位数

bash 复制代码
mysql> select format(12.3456,2);
+-------------------+
| format(12.3456,2) |
+-------------------+
| 12.35             |
+-------------------+
1 row in set (0.00 sec)

3.6 rand产生随机数

bash 复制代码
mysql> select rand();
+---------------------+
| rand()              |
+---------------------+
| 0.12839327112621932 |
+---------------------+
1 row in set (0.00 sec)

0~100的随机数
mysql> select rand()*100;
+-------------------+
| rand()*100        |
+-------------------+
| 34.58598790186084 |
+-------------------+
1 row in set (0.00 sec)

3.7 mod取模求余

bash 复制代码
mysql> select mod(12,3);
+-----------+
| mod(12,3) |
+-----------+
|         0 |
+-----------+
1 row in set (0.00 sec)

mysql> select mod(12,5);
+-----------+
| mod(12,5) |
+-----------+
|         2 |
+-----------+
1 row in set (0.00 sec)

4.其他函数

4.1 user查询当前用户

bash 复制代码
mysql> select user();
+--------+
| user() |
+--------+
| root@  |
+--------+
1 row in set (0.00 sec)

4.2 md5

bash 复制代码
mysql> create table user(
    -> name varchar(20),
    -> password varchar(32));
Query OK, 0 rows affected (0.00 sec)

mysql> select * from user where name = '张三'and password = md5('11111111111111');
+--------+----------------------------------+
| name   | password                         |
+--------+----------------------------------+
| 张三   | e78582c7fa761cb9358009503f2810a9 |
+--------+----------------------------------+
1 row in set (0.00 sec)

4.3 password用户加密

bash 复制代码
mysql> select password('root');
+-------------------------------------------+
| password('root')                          |
+-------------------------------------------+
| *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)

4.4 ifnull(val1,val2) 如果val1为null,返回val2,否则返回val1的值

bash 复制代码
mysql> select ifnull('abc','123');
+---------------------+
| ifnull('abc','123') |
+---------------------+
| abc                 |
+---------------------+
1 row in set (0.00 sec)

mysql> select ifnull(null,'123');
+--------------------+
| ifnull(null,'123') |
+--------------------+
| 123                |
+--------------------+
1 row in set (0.00 sec)
相关推荐
wei_shuo2 小时前
数据库安全最后一公里:金仓SQL防火墙如何填平开发留下的注入坑
数据库·kingbase·金仓
深念Y2 小时前
Elasticsearch 8.11 + IK 分词器安装踩坑记录
大数据·数据库·elasticsearch·中文分词·jenkins·ki分词器
light blue bird2 小时前
MES/ERP 多维度整周期场景报表
数据库·ai大数据·大数据报表·多功能图表报表
颜颜颜yan_2 小时前
让数据库学会说“不“——金仓 SQL 防火墙深度解析
数据库·后端
m0_706653232 小时前
数据库与缓存操作策略:数据一致性与并发问题
java·数据库·缓存
JosieBook2 小时前
【数据库】金仓数据库智能SQL防护机制,实现99.99%异常语句精准拦截
数据库·sql
dapeng28702 小时前
使用PyTorch构建你的第一个神经网络
jvm·数据库·python
Gauss松鼠会2 小时前
【GaussDB】技术解读|GaussDB架构介绍
数据库·架构·数据库开发·gaussdb
星空露珠2 小时前
迷你世界UGC3.0脚本Wiki世界模块管理接口 World
开发语言·数据库·算法·游戏·lua