一篇文章带你快速上手MySQL中的各种函数的使用

1. 日期函数

函数名称 描述
NOW() 返回当前的日期和时间
CURDATE() 返回当前的日期(不包含时间)
CURRENT_DATE() 返回当前的日期(不包含时间)
CURRENT_TIME() 返回当前的时间(不包含日期)
DATEDIFF(date1, date2) 返回两个日期之间的天数差
DATE_ADD(date, INTERVAL expr unit) 向指定日期添加一个时间间隔
DATE_SUB(date, INTERVAL expr unit) 从指定日期中减去一个时间间隔
YEAR(date) 返回当前年份
MONTH(date) 返回当前月份
DAY(date) 返回今天是这个月中的第几天
  • NOW(): 返回当前的日期和时间。
mysql 复制代码
mysql> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2024-10-31 12:03:01 |
+---------------------+
1 row in set (0.00 sec)
  • CURDATE(): 返回当前的日期(不包含时间)
mysql 复制代码
mysql> SELECT CURDATE();
+------------+
| CURDATE()  |
+------------+
| 2024-10-31 |
+------------+
1 row in set (0.00 sec)
  • CURRENT_DATE(): 返回当前的日期(不包含时间)
mysql 复制代码
mysql> SELECT CURRENT_DATE();
+----------------+
| CURRENT_DATE() |
+----------------+
| 2024-10-31     |
+----------------+
1 row in set (0.00 sec)
  • CURRENT_TIME(): 返回当前的时间(不包含日期)
mysql 复制代码
mysql> SELECT CURRENT_TIME();
+----------------+
| CURRENT_TIME() |
+----------------+
| 12:10:09       |
+----------------+
1 row in set (0.00 sec)
  • DATEDIFF(date1, date2): 返回两个日期之间的天数差。
mysql 复制代码
mysql> SELECT DATEDIFF('2024-11-01', '2024-10-30');
+--------------------------------------+
| DATEDIFF('2024-11-01', '2024-10-30') |
+--------------------------------------+
|                                    2 |
+--------------------------------------+
1 row in set (0.00 sec)
  • DATE_ADD(date, INTERVAL expr unit): 向指定日期添加一个时间间隔。
mysql 复制代码
mysql> SELECT ADDDATE('2024-10-30', INTERVAL 7 DAY);
+---------------------------------------+
| ADDDATE('2024-10-30', INTERVAL 7 DAY) |
+---------------------------------------+
| 2024-11-06                            |
+---------------------------------------+
1 row in set (0.00 sec)
  • DATE_SUB(date, INTERVAL expr unit) 从指定日期中减去一个时间间隔
mysql 复制代码
mysql> SELECT SUBDATE('2024-10-30', INTERVAL 7 DAY);
+---------------------------------------+
| SUBDATE('2024-10-30', INTERVAL 7 DAY) |
+---------------------------------------+
| 2024-10-23                            |
+---------------------------------------+
1 row in set (0.00 sec)
  • YEAR(date):返回当前年份
mysql 复制代码
mysql> SELECT YEAR(NOW());
+-------------+
| YEAR(NOW()) |
+-------------+
|        2024 |
+-------------+
1 row in set (0.00 sec)
  • MONTH(date):返回当前月份
mysql 复制代码
mysql> SELECT MONTH(NOW()); 
+--------------+
| MONTH(NOW()) |
+--------------+
|           10 |
+--------------+
1 row in set (0.01 sec)
  • DAY(date):返回今天是这个月中的第几天
mysql 复制代码
mysql>SELECT DAY(NOW());
+------------+
| DAY(NOW()) |
+------------+
|         31 |
+------------+
1 row in set (0.00 sec)

2. 字符串函数

函数名称 语法 功能
CONCAT () CONCAT(str1, str2,...) 用于连接两个或多个字符串
SUBSTRING () SUBSTRING(str, start, length) 用于提取字符串的子串
LENGTH () LENGTH(str) 用于获取字符串的长度
UPPER () UPPER(str) 用于将字符串转换为大写
LOWER () LOWER(str) 用于将字符串转换为小写
TRIM () TRIM([BOTH | LEADING | TRAILING] str) 用于去除字符串两端的特定字符(默认为空格)
REPLACE () REPLACE(str, from_str, to_str) 用于在字符串中替换指定的子串
LEFT () LEFT(str, length) 从字符串的左侧提取指定长度的子串
RIGHT () RIGHT(str, length) 从字符串的右侧提取指定长度的子串
CHARSET() CHARSET(str) 返回字符串字符集
INSTR() INSTR(string,substring) 返回substring在string中出现的位置,没有返回0
UCASE() UCASE(string) 将字符串中的所有小写字母转换为大写字母
LCASE() LCASE(string) 将字符串中的所有大写字母转换为小写字母
REPLACE() REPLACE(str,search_str,replace_str) 在str中用replace_str替换search_str
STRCMP() STRCMP(string1,string2) 用于比较两个字符串,并且返回一个整数来表示它们的比较结果
LTRIM() LTRIM(string) 去除前空格
RTRIM() RTRIM(string) 去除后空格
TRIM() TRIM(string) 删除字符串两端(左侧和右侧)的空格
  • CONCAT () 函数

用于连接两个或多个字符串。

语法:CONCAT(str1, str2,...)

示例:

mysql 复制代码
mysql> SELECT CONCAT('Hello', ' ', 'World');
+-------------------------------+
| CONCAT('Hello', ' ', 'World') |
+-------------------------------+
| Hello World                   |
+-------------------------------+
1 row in set (0.00 sec)
  • SUBSTRING () 函数

用于提取字符串的子串。

语法:SUBSTRING(str, start, length)

示例:

mysql 复制代码
mysql> SELECT SUBSTRING('HelloWorld', 6, 5);
+-------------------------------+
| SUBSTRING('HelloWorld', 6, 5) |
+-------------------------------+
| World                         |
+-------------------------------+
1 row in set (0.01 sec)
  • LENGTH () 函数

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

语法:LENGTH(str)

示例:

mysql 复制代码
mysql> SELECT LENGTH('Hello');
+-----------------+
| LENGTH('Hello') |
+-----------------+
|               5 |
+-----------------+
1 row in set (0.00 sec)
  • **UPPER ()函数 **

用于将字符串转换为大写

语法:UPPER(str)

示例:

mysql 复制代码
mysql> SELECT UPPER('hello');
+----------------+
| UPPER('hello') |
+----------------+
| HELLO          |
+----------------+
1 row in set (0.00 sec)
  • LOWER () 函数

用于将字符串转换为小写

语法:LOWER(str)

示例:

mysql 复制代码
mysql> SELECT LOWER('HELLO');
+----------------+
| LOWER('HELLO') |
+----------------+
| hello          |
+----------------+
1 row in set (0.00 sec)
  • TRIM () 函数

用于去除字符串两端的特定字符(默认为空格)。

语法:TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)

示例:

mysql 复制代码
mysql> SELECT TRIM('   Hello   ');
+---------------------+
| TRIM('   Hello   ') |
+---------------------+
| Hello               |
+---------------------+
1 row in set (0.00 sec)
  • REPLACE () 函数

用于在字符串中替换指定的子串。

语法:REPLACE(str, from_str, to_str)

示例:

mysql 复制代码
mysql> SELECT REPLACE('Hello World', 'World', 'Universe');
+---------------------------------------------+
| REPLACE('Hello World', 'World', 'Universe') |
+---------------------------------------------+
| Hello Universe                              |
+---------------------------------------------+
1 row in set (0.00 sec)
  • LEFT ()函数

从字符串的左侧提取指定长度的子串

语法:LEFT(str, length)

示例:

mysql 复制代码
mysql> SELECT LEFT('HelloWorld', 5);
+-----------------------+
| LEFT('HelloWorld', 5) |
+-----------------------+
| Hello                 |
+-----------------------+
1 row in set (0.00 sec)
  • RIGHT () 函数

从字符串的右侧提取指定长度的子串

语法:RIGHT(str, length)

mysql 复制代码
mysql> SELECT RIGHT('HelloWorld', 5);
+------------------------+
| RIGHT('HelloWorld', 5) |
+------------------------+
| World                  |
+------------------------+
1 row in set (0.00 sec)
  • CHARSET()函数

返回字符串字符集

语法:CHARSET(str)

mysql 复制代码
mysql> SELECT CHARSET('hello');
+------------------+
| CHARSET('hello') |
+------------------+
| utf8mb4          |
+------------------+
1 row in set (0.00 sec)
  • INSTR()函数

返回substring在string中出现的位置,没有返回0

语法:NSTR(string,substring)

mysql 复制代码
mysql> SELECT INSTR('Hello, World!', 'World'); 
+---------------------------------+
| INSTR('Hello, World!', 'World') |
+---------------------------------+
|                               8 |
+---------------------------------+
1 row in set (0.00 sec)
  • UCASE()函数

将字符串中的所有小写字母转换为大写字母

语法:UCASE(string)

mysql 复制代码
mysql> SELECT UCASE('Hello, World!'); 
+------------------------+
| UCASE('Hello, World!') |
+------------------------+
| HELLO, WORLD!          |
+------------------------+
1 row in set (0.00 sec)
  • LCASE()函数

将字符串中的所有大写字母转换为小写字母

语法:LCASE(string)

mysql 复制代码
mysql> SELECT LCASE('Hello, World!');
+------------------------+
| LCASE('Hello, World!') |
+------------------------+
| hello, world!          |
+------------------------+
1 row in set (0.00 sec)
  • REPLACE()函数

在str中用replace_str替换search_str

语法:REPLACE(str,search_str,replace_str)

mysql 复制代码
mysql> SELECT REPLACE('hello world','world','linux');
+----------------------------------------+
| REPLACE('hello world','world','linux') |
+----------------------------------------+
| hello linux                            |
+----------------------------------------+
1 row in set (0.00 sec)
  • STRCMP()函数

用于比较两个字符串,并且返回一个整数来表示它们的比较结果

  • 如果 string1 等于 string2,则返回 0。
  • 如果 string1 大于 string2(基于字符序),则返回 1。
  • 如果 string1 小于 string2(基于字符序),则返回 -1。

语法:STRCMP(string1,string2)

mysql 复制代码
#相等
mysql> SELECT STRCMP('Hello', 'Hello'); 
+--------------------------+
| STRCMP('Hello', 'Hello') |
+--------------------------+
|                        0 |
+--------------------------+
1 row in set (0.00 sec)
#小于
mysql> SELECT STRCMP('apple', 'banana'); -- 返回-1
+---------------------------+
| STRCMP('apple', 'banana') |
+---------------------------+
|                        -1 |
+---------------------------+
1 row in set (0.00 sec)
#大于
mysql> SELECT STRCMP('b', 'apple');
+----------------------+
| STRCMP('b', 'apple') |
+----------------------+
|                    1 |
+----------------------+
1 row in set (0.00 sec)
  • LTRIM()函数

去除前空格

语法:LTRIM(string)

mysql 复制代码
mysql> SELECT LTRIM('   Hello, World!   '); 
+------------------------------+
| LTRIM('   Hello, World!   ') |
+------------------------------+
| Hello, World!                |
+------------------------------+
1 row in set (0.00 sec)
  • RTRIM()函数

去除前空格

语法:RTRIM(string)

mysql 复制代码
mysql> SELECT RTRIM('   Hello World!   ');
+-----------------------------+
| RTRIM('   Hello World!   ') |
+-----------------------------+
|    Hello World!             |
+-----------------------------+
1 row in set (0.00 sec)
  • TRIM()函数

删除字符串两端(左侧和右侧)的空格

语法:TRIM(string)

mysql 复制代码
mysql> SELECT TRIM('   Hello World!   '); 
+----------------------------+
| TRIM('   Hello World!   ') |
+----------------------------+
| Hello World!               |
+----------------------------+
1 row in set (0.00 sec)

3. 数学函数

函数名称 语法 描述
ABS() ABS(number) 返回number的绝对值
BIN() BIN(number) 十进制转化为二进制
HEX() HEX(string)、HEX(N) 将字符串或数字转换成等效的十六进制字符串值
CONV() CONV(number,form_base,to_base) 进制转换
CEILING() CEILING(number) 向上取整
FLOOR() FLOOR(number) 向下取整
FORMAT() FORMAT(number, decimal_places, locale) 格式化,保留小数位数
RADN() RAND([seed]) 返回随机浮点数,范围[0.0,1.0]
MOD() MOD(dividend, divisor) 取模,求余
  • ABS()函数

返回number的绝对值

语法:ABS(number)

mysql 复制代码
mysql> SELECT ABS(-10);
+----------+
| ABS(-10) |
+----------+
|       10 |
+----------+
1 row in set (0.00 sec)
  • BIN()函数

十进制转化为二进制

语法:BIN(number)

mysql 复制代码
mysql> SELECT BIN(15); 
+---------+
| BIN(15) |
+---------+
| 1111    | 
+---------+
1 row in set (0.00 sec)
  • HEX()函数

将字符串或数字转换成等效的十六进制字符串值

语法:HEX(string)、HEX(N)

MYSQL 复制代码
#数字转换成等效的十六进制字符串值
mysql> SELECT HEX(2020);
+-----------+
| HEX(2020) |
+-----------+
| 7E4       |
+-----------+
1 row in set (0.00 sec)
#字符串转换成等效的十六进制字符串值
mysql> SELECT HEX('geeksforgeeks'); 
+----------------------------+
| HEX('geeksforgeeks')       |
+----------------------------+
| 6765656B73666F726765656B73 |
+----------------------------+
1 row in set (0.00 sec)
  • CONV()函数

在不同进制之间转换数字

  • number: 要转换的数字,通常是字符串类型。
  • from_base: 原始数字的进制,可以是 2 到 36 之间的整数。
  • to_base: 目标进制,也应在 2 到 36 之间。

语法: CONV(number,form_base,to_base)

mysql 复制代码
#将二进制数 '1010' 转换为十进制
mysql>    SELECT CONV('1010', 2, 10); -- 返回:10
+---------------------+
| CONV('1010', 2, 10) |
+---------------------+
| 10                  |
+---------------------+
1 row in set (0.00 sec)
#将十六进制数 'A' 转换为十进制
mysql>    SELECT CONV('A', 16, 10); -- 返回:10
+-------------------+
| CONV('A', 16, 10) |
+-------------------+
| 10                |
+-------------------+
1 row in set (0.00 sec)
#将十进制数 15 转换为二进制
mysql>    SELECT CONV(15, 10, 2); -- 返回:1111
+-----------------+
| CONV(15, 10, 2) |
+-----------------+
| 1111            |
+-----------------+
1 row in set (0.00 sec)
#将八进制数 '17' 转换为十六进制
mysql>    SELECT CONV('17', 8, 16); -- 返回:F
+-------------------+
| CONV('17', 8, 16) |
+-------------------+
| F                 |
+-------------------+
1 row in set (0.00 sec)
  • CEILING() 函数

用于返回大于或等于指定数字的最小整数值。

语法:CEILING(number)

mysql 复制代码
mysql> SELECT CEILING(4.2); 
+--------------+
| CEILING(4.2) |
+--------------+
|            5 |
+--------------+
1 row in set (0.00 sec)
  • FLOOR()函数

用于返回小于或等于指定数字的最大整数值

语法:FLOOR(number)

mysql 复制代码
mysql> SELECT FLOOR(4.7); 
+------------+
| FLOOR(4.7) |
+------------+
|          4 |
+------------+
1 row in set (0.00 sec)
  • FORMAT()函数

并可以指定小数点后的位数和区域设置

  • number: 要格式化的数字,可以是整数或浮点数。
  • decimal_places: 指定保留的小数位数,必须是非负整数。
  • locale 可选可选: 指定用于格式化的地区设置(如 'en_US'、'de_DE' 等),以决定千分位和小数点符号的样式。如果省略,则使用默认设置。

语法:FORMAT(number, decimal_places, locale)

mysql 复制代码
mysql> SELECT FORMAT(1234567.89, 2); -- 返回:'1,234,567.89'
+-----------------------+
| FORMAT(1234567.89, 2) |
+-----------------------+
| 1,234,567.89          |
+-----------------------+
1 row in set (0.00 sec)
mysql> SELECT FORMAT(1234567.89, 0);
+-----------------------+
| FORMAT(1234567.89, 0) |
+-----------------------+
| 1,234,568             |
+-----------------------+
1 row in set (0.00 sec)
mysql> SELECT FORMAT(1234567.8, 3); 
+----------------------+
| FORMAT(1234567.8, 3) |
+----------------------+
| 1,234,567.800        |
+----------------------+
1 row in set (0.00 sec)
mysql>    SELECT FORMAT(1234567.89, 2, 'de_DE');
+--------------------------------+
| FORMAT(1234567.89, 2, 'de_DE') |
+--------------------------------+
| 1.234.567,89                   |
+--------------------------------+
1 row in set (0.00 sec)
  • RAND()函数

用于生成一个介于 0 和 1 之间的随机浮点数

语法:RAND([seed])

mysql 复制代码
mysql> SELECT RAND(); 
+--------------------+
| RAND()             |
+--------------------+
| 0.7771136926273943 |
+--------------------+
1 row in set (0.00 sec)
  • MOD()函数

用于计算两个数相除后的余数

  • dividend: 被除数(即要进行模运算的数字)。
  • divisor: 除数(即用来除被除数的数字)。

语法:MOD(dividend, divisor)

mysql 复制代码
mysql>    SELECT MOD(10, 3); 
+------------+
| MOD(10, 3) |
+------------+
|          1 |
+------------+
1 row in set (0.00 sec)
mysql>    SELECT MOD(-10, 3); 
+-------------+
| MOD(-10, 3) |
+-------------+
|          -1 |
+-------------+
1 row in set (0.00 sec)

4. 其他函数

  • user() 查询当前用户
mysql 复制代码
select user();
  • md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串
mysql 复制代码
select md5('admin');
+----------------------------------+
| md5('admin') |
+----------------------------------+
| 21232f297a57a5a743894a0e4a801fc3 |
+----------------------------------+
  • database()显示当前正在使用的数据库
mysql 复制代码
select database();
  • password()函数,MySQL数据库使用该函数对用户加密
mysql 复制代码
select password('root');
+-------------------------------------------+
| password('root') |
+-------------------------------------------+
| *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+-------------------------------------------+
  • ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值
mysql 复制代码
select ifnull('abc', '123');
+----------------------+
| ifnull('abc', '123') |
+----------------------+
| abc |
+----------------------+
1 row in set (0.01 sec)
select ifnull(null, '123');
+---------------------+
| ifnull(null, '123') |
+---------------------+
| 123 |
+---------------------+
1 row in set (0.00 sec)
相关推荐
-SGlow-3 小时前
MySQL相关概念和易错知识点(2)(表结构的操作、数据类型、约束)
linux·运维·服务器·数据库·mysql
明月5664 小时前
Oracle 误删数据恢复
数据库·oracle
水瓶_bxt5 小时前
Centos安装HAProxy搭建Mysql高可用集群负载均衡
mysql·centos·负载均衡
♡喜欢做梦5 小时前
【MySQL】深入浅出事务:保证数据一致性的核心武器
数据库·mysql
遇见你的雩风5 小时前
MySQL的认识与基本操作
数据库·mysql
dblens 数据库管理和开发工具5 小时前
MySQL新增字段DDL:锁表全解析、避坑指南与实战案例
数据库·mysql·dblens·dblens mysql·数据库连接管理
weixin_419658315 小时前
MySQL的基础操作
数据库·mysql
不辉放弃7 小时前
ZooKeeper 是什么?
数据库·大数据开发
Goona_7 小时前
拒绝SQL恐惧:用Python+pyqt打造任意Excel数据库查询系统
数据库·python·sql·excel·pyqt
Olrookie8 小时前
若依前后端分离版学习笔记(三)——表结构介绍
笔记·后端·mysql