一篇文章带你快速上手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)
相关推荐
yuezhilangniao几秒前
xtr备份prepare到底变化了啥
mysql
yyk的萌2 分钟前
创建属于自己的mysql的mcp
mysql·adb·ai·mcp
流烟默2 分钟前
腾讯云Centos7.6使用yum安装MySQL8
mysql·centos·腾讯云
仙俊红7 分钟前
如何优化 MySQL 深分页 SQL
android·sql·mysql
yyuuuzz31 分钟前
谷歌云基础服务的入门认知
linux·运维·服务器·数据库·人工智能·github
超梦dasgg39 分钟前
工作中 MySQL 读写分离主从延迟:成因、影响、落地方案、生产实战处理
数据库·mysql
Wonderful U1 小时前
Python+Django实战:打造智能生鲜果蔬进销存管理系统(采购入库、库存预警、销售开单、毛利统计)
数据库·python·django
Demon1_Coder1 小时前
Day4-微服务-Seata默认事务
java·数据库·微服务
疯狂热爱代码的00后1 小时前
入门必看! MySQL增删改查全套示例SQL 直接复制运行
mysql
我是大猴子1 小时前
Redis为什么不适合做持久化和DB的区别在哪里
数据库·redis·缓存