【MySQL】内置函数详解

📢博客主页:https://blog.csdn.net/2301_779549673

📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

📢本文由 JohnKi 原创,首发于 CSDN🙉

📢未来很长,值得我们全力奔赴更美好的生活✨

文章目录


📢前言

MySQL内置函数丰富多样,能够极大地提高数据库操作的效率和灵活性。本文将详细介绍MySQL内置函数,帮助读者更好地理解和运用这些强大的工具。

MySQL的内置函数可以分为多

个类别,包括日期函数、字符串函数、数学函数、加密函数、流程控制函数和其他函数等。这些函数在数据库操作中起着至关重要的作用,可以帮助我们更高效地处理数据。


🏳️‍🌈1 日期函数

MySQL 提供了丰富的日期函数,用于处理日期和时间数据。这些函数可以帮助我们获取当前日期和时间、进行日期的加减运算、计算日期之间的差值等。

  1. 获得年月日
    current_date() :返回当前日期,格式为 YYYY-MM-D
cpp 复制代码
mysql> select current_date();
+----------------+
| current_date() |
+----------------+
| 2024-12-11     |
+----------------+
1 row in set (0.00 sec)
  1. 获得时分秒
    current_time() :只显示当前时间,格式为 HH:MM:SS
cpp 复制代码
mysql> select current_time();
+----------------+
| current_time() |
+----------------+
| 12:08:06       |
+----------------+
1 row in set (0.00 sec)
  1. 获得时间戳
    current_timestamp() :返回当前时间戳,格式为 YYYY-MM-DD HH:MM:SS
cpp 复制代码
mysql> select current_timestamp();
+---------------------+
| current_timestamp() |
+---------------------+
| 2024-12-11 12:08:15 |
+---------------------+
1 row in set (0.00 sec)
  1. 日期的基础上加时间
    date_add(date, interval d_value_type):在给定的日期上添加指定的时间间隔
cpp 复制代码
mysql> select date_add('2024-12-11', interval 10 day);
+-----------------------------------------+
| date_add('2024-12-11', interval 10 day) |
+-----------------------------------------+
| 2024-12-21                              |
+-----------------------------------------+
1 row in set (0.00 sec)
  1. 在日期的基础上减日期
    date_sub(date, interval d_value_type):在给定的日期上减去指定的时间间隔
cpp 复制代码
mysql> select date_sub('2024-12-11', interval 20 day);
+-----------------------------------------+
| date_sub('2024-12-11', interval 20 day) |
+-----------------------------------------+
| 2024-11-21                              |
+-----------------------------------------+
1 row in set (0.00 sec)
  1. 计算两个日期之间相差多少天
    datediff(date1, date2) :计算两个日期之间的时间差,单位是
cpp 复制代码
mysql> select datediff('2024-12-11', '2004-8-28');
+-------------------------------------+
| datediff('2024-12-11', '2004-8-28') |
+-------------------------------------+
|                                7410 |
+-------------------------------------+
1 row in set (0.00 sec)
  1. 获得当前时间
    now():返回当前日期时间
cpp 复制代码
mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2024-12-11 12:14:05 |
+---------------------+
1 row in set (0.00 sec)

❤️案例-1:创建一张表,记录生日

添加一张表

cpp 复制代码
mysql> create table tmp(
    -> id bigint primary key auto_increment,
    -> birthday date not null
    -> );
Query OK, 0 rows affected (0.03 sec)

插入数据

cpp 复制代码
mysql> insert into tmp(birthday) values('2004-08-28');
Query OK, 1 row affected (0.00 sec)

mysql> insert into tmp(birthday) values('2004-7-28');
Query OK, 1 row affected (0.00 sec)

mysql> insert into tmp(birthday) values('1949-10-1');
Query OK, 1 row affected (0.00 sec)

mysql> select * from tmp;
+----+------------+
| id | birthday   |
+----+------------+
|  1 | 2004-08-28 |
|  2 | 2004-07-28 |
|  3 | 1949-10-01 |
+----+------------+
3 rows in set (0.00 sec)

🧡案例-2:创建一个留言表

添加一张表

cpp 复制代码
mysql> create table msg(
    -> id bigint primary key auto_increment,
    -> content varchar(100) not null,
    -> sendtime datetime
    -> );
Query OK, 0 rows affected (0.02 sec)

插入数据

cpp 复制代码
mysql> insert into msg(content, sendtime) 
	values('纸上得来终觉浅,绝知此事要躬行。', nowQuery OK, 1 row affected (0.00 sec)

mysql> select * from msg;
+----+--------------------------------------------------+---------------------+
| id | content                                          | sendtime            |
+----+--------------------------------------------------+---------------------+
|  1 | 纸上得来终觉浅,绝知此事要躬行。                 | 2024-12-11 12:31:24 |
+----+--------------------------------------------------+---------------------+
1 row in set (0.00 sec)

mysql> insert into msg(content, sendtime) values('北国风光,千里冰封,万里雪飘。', now());
Query OK, 1 row affected (0.00 sec)

mysql> select * from msg;
+----+--------------------------------------------------+---------------------+
| id | content                                          | sendtime            |
+----+--------------------------------------------------+---------------------+
|  1 | 纸上得来终觉浅,绝知此事要躬行。                 | 2024-12-11 12:31:24 |
|  3 | 北国风光,千里冰封,万里雪飘。                   | 2024-12-11 12:34:06 |
+----+--------------------------------------------------+---------------------+
2 rows in set (0.00 sec)

查询在2分钟内发布的帖子

cpp 复制代码
理解:
------------------------------|-----------|-------------|------------------
							初始时间 	now() 		初始时间+2min
cpp 复制代码
mysql> select * from msg where date_add(sendtime, interval 2 minute) > now();
+----+-----------------------------------------------+---------------------+
| id | content                                       | sendtime            |
+----+-----------------------------------------------+---------------------+
|  1 | 纸上得来终觉浅,绝知此事要躬行                | 2024-12-11 12:53:14 |
|  2 | 北国风光,千里冰封,万里雪飘                  | 2024-12-11 12:53:34 |
|  3 | 恰同学少年,风华正茂                          | 2024-12-11 12:53:54 |
+----+-----------------------------------------------+---------------------+
3 rows in set (0.00 sec)

🏳️‍🌈2 字符串函数

字符串函数在MySQL中用于处理字符串数据。这些函数可以帮助我们拼接字符串、转换字符串的大小写、截取字符串、替换字符串中的子串等。

注意事项

这些函数都不是真正的去修改数据库中的数据,而是在 select 语句中显示。

  • length(s):计算字符串长度函数,返回字符串的字节长度。例如,SELECT length('Hello');可能返回5,因为在默认编码下,一个字母占用一个字节。
  • concat(s1,s2...,sn):合并字符串函数,返回结果为连接参数产生的字符串,参数可以是一个或多个。例如,SELECT concat('Hello', ', ', 'world!');返回Hello, world!。
  • lower(string) / lcase(string):将字符串中的字母转换为小写。例如,SELECT lower('HELLO');返回hello。
  • upper(string) / ucase(string):将字符串中的字母转换为大写。例如,SELECT upper('hello');返回HELLO。
  • left(string,x):返回字符串string中最左边的x个字符。例如,SELECT left('Hello', 3);返回Hel。
  • right(string,x):返回字符串string中最右边的x个字符。例如,SELECT right('Hello', 3);返回llo。
  • replace(str,search_str,replace_str):在str中用replace_str替换search_str,并返回替换后的新字符串。例如,SELECT replace('Hello world', 'world', 'MySQL');返回Hello MySQL。
  • substring(str,pos[,length]):从str的pos位置开始,取length个字符串。例如,SELECT substring('Hello world', 7);返回world。
  • reverse(string):返回颠倒字符串string的结果。例如,SELECT reverse('Hello');返回olleH。
  • strcmp(string1, string2):逐字符比较两个字符串的大小。例如,SELECT strcmp('Hello', 'Hello');返回0,SELECT strcmp('Hello', 'Hi');返回正数,SELECT strcmp('Hi', 'Hello');返回负数。=
  • trim(string):删除字符串左右两侧的空格。例如,SELECT trim(' Hello ');返回Hello。
  • ltrim(string):去除左侧空格。例如,SELECT ltrim(' Hello ');返回Hello 。
  • rtrim(string):去除右侧空格。例如,SELECT rtrim(' Hello ');返回 Hello。
  • charset(string):返回字符串字符集。例如,SELECT charset('Hello');可能返回数据库的默认字符集。

用到的数据表

cpp 复制代码
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> show create table emp;
+-------+--------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
+-------+--------------------------------------------------------------------------------------------------+
| emp   | CREATE TABLE `emp` (
  `empno` int(6) unsigned zerofill NOT NULL COMMENT '雇员编号',
  `ename` varchar(10) DEFAULT NULL COMMENT '雇员姓名',
  `job` varchar(9) DEFAULT NULL COMMENT '雇员职位',
  `mgr` int(4) unsigned zerofill DEFAULT NULL COMMENT '雇员领导编号',
  `hiredate` datetime DEFAULT NULL COMMENT '雇佣时间',
  `sal` decimal(7,2) DEFAULT NULL COMMENT '工资月薪',
  `comm` decimal(7,2) DEFAULT NULL COMMENT '奖金',
  `deptno` int(2) unsigned zerofill DEFAULT NULL COMMENT '部门编号'
) ENGINE=InnoDB DEFAULT CHARSET=utf8                                 |
+-------+--------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

获取emp表的ename列的字符集

cpp 复制代码
mysql> select charset(ename) from emp;
+----------------+
| charset(ename) |
+----------------+
| utf8           |
| utf8           |
| utf8           |
| utf8           |
| utf8           |
| utf8           |
| utf8           |
| utf8           |
| utf8           |
| utf8           |
| utf8           |
| utf8           |
| utf8           |
| utf8           |
+----------------+
14 rows in set (0.00 sec)

将EMP表中所有名字中有S的替换成'上海'

cpp 复制代码
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)

截取EMP表中ename字段的第二个到第三个字符

cpp 复制代码
mysql> select substring(ename, 2, 2), ename from emp;
+------------------------+--------+
| substring(ename, 2, 2) | ename  |
+------------------------+--------+
| MI                     | SMITH  |
| LL                     | ALLEN  |
| AR                     | WARD   |
| ON                     | JONES  |
| AR                     | MARTIN |
| LA                     | BLAKE  |
| LA                     | CLARK  |
| CO                     | SCOTT  |
| IN                     | KING   |
| UR                     | TURNER |
| DA                     | ADAMS  |
| AM                     | JAMES  |
| OR                     | FORD   |
| IL                     | MILLER |
+------------------------+--------+
14 rows in set (0.00 sec)

以首字母小写的方式显示所有员工的姓名

cpp 复制代码
mysql> select concat(lcase(substring(ename, 1, 1)),substring(ename,2)) from emp;
+----------------------------------------------------------+
| concat(lcase(substring(ename, 1, 1)),substring(ename,2)) |
+----------------------------------------------------------+
| sMITH                                                    |
| aLLEN                                                    |
| wARD                                                     |
| jONES                                                    |
| mARTIN                                                   |
| bLAKE                                                    |
| cLARK                                                    |
| sCOTT                                                    |
| kING                                                     |
| tURNER                                                   |
| aDAMS                                                    |
| jAMES                                                    |
| fORD                                                     |
| mILLER                                                   |
+----------------------------------------------------------+
14 rows in set (0.00 sec)

🏳️‍🌈3 数学函数

数学函数在MySQL中用于进行数学计算。这些函数可以帮助我们计算绝对值、进行进制转换、取整、格式化数字、生成随机数等。

绝对值

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

向上取整

cpp 复制代码
mysql> select ceiling(100.22);
+-----------------+
| ceiling(100.22) |
+-----------------+
|             101 |
+-----------------+
1 row in set (0.00 sec)

向下取整

cpp 复制代码
mysql> select floor(100.22);
+---------------+
| floor(100.22) |
+---------------+
|           100 |
+---------------+
1 row in set (0.00 sec)

保留2位小数位数(小数四舍五入

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

产生随机数

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

🏳️‍🌈4 其它函数

user() 查询当前用户

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

md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串

cpp 复制代码
mysql> select md5('admin');
+----------------------------------+
| md5('admin')                     |
+----------------------------------+
| 21232f297a57a5a743894a0e4a801fc3 |
+----------------------------------+
1 row in set (0.00 sec)

mysql> select md5('abc');
+----------------------------------+
| md5('abc')                       |
+----------------------------------+
| 900150983cd24fb0d6963f7d28e17f72 |
+----------------------------------+
1 row in set (0.00 sec)

database()显示当前正在使用的数据库

cpp 复制代码
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mall               |
| mysql              |
| performance_schema |
| scott              |
| sys                |
| test_12_10         |
| test_12_11         |
| test_database      |
| test_db            |
+--------------------+
10 rows in set (0.00 sec)

password()函数,MySQL数据库使用该函数对用户加密

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

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

cpp 复制代码
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)

👥总结

本篇博文对 【MySQL】内置函数 做了一个较为详细的介绍,不知道对你有没有帮助呢

觉得博主写得还不错的三连支持下吧!会继续努力的~

相关推荐
明月醉窗台1 小时前
C++ SQLite轻量化数据库使用总结
数据库·c++·sqlite
KEEPMA2 小时前
MySQL追梦旅途之性能优化
mysql·性能优化
woshilys2 小时前
sql server 存储过程跟踪
数据库·sqlserver
总是学不会.3 小时前
【Mysql】索引相关基础知识(二)
java·数据库·mysql·intellij-idea·开发
小灵蛇3 小时前
MySQL:表的内置函数
linux·数据库·mysql
zmd-zk3 小时前
宽窄依赖/宽窄巷子——spark
大数据·数据库·分布式·spark
P1sc3s0073 小时前
nexus5x安卓root
android
alden_ygq4 小时前
etcd常见运维事件
运维·数据库·etcd
苹果酱05674 小时前
Springboot中的SPI 机制
java·vue.js·spring boot·mysql·课程设计