一篇文章带你快速上手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)
相关推荐
工业甲酰苯胺1 小时前
Redis性能优化的18招
数据库·redis·性能优化
没书读了2 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
i道i3 小时前
MySQL win安装 和 pymysql使用示例
数据库·mysql
小怪兽ysl3 小时前
【PostgreSQL使用pg_filedump工具解析数据文件以恢复数据】
数据库·postgresql
wqq_9922502773 小时前
springboot基于微信小程序的食堂预约点餐系统
数据库·微信小程序·小程序
爱上口袋的天空3 小时前
09 - Clickhouse的SQL操作
数据库·sql·clickhouse
Oak Zhang4 小时前
sharding-jdbc自定义分片算法,表对应关系存储在mysql中,缓存到redis或者本地
redis·mysql·缓存
聂 可 以5 小时前
Windows环境安装MongoDB
数据库·mongodb
web前端神器5 小时前
mongodb多表查询,五个表查询
数据库·mongodb
门牙咬脆骨5 小时前
【Redis】redis缓存击穿,缓存雪崩,缓存穿透
数据库·redis·缓存