一篇文章带你快速上手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)
相关推荐
·薯条大王3 小时前
MySQL联合查询
数据库·mysql
morris1315 小时前
【redis】redis实现分布式锁
数据库·redis·缓存·分布式锁
hycccccch5 小时前
Canal+RabbitMQ实现MySQL数据增量同步
java·数据库·后端·rabbitmq
这个懒人6 小时前
深入解析Translog机制:Elasticsearch的数据守护者
数据库·elasticsearch·nosql·translog
Yan-英杰6 小时前
【百日精通JAVA | SQL篇 | 第二篇】数据库操作
服务器·数据库·sql
NineData6 小时前
NineData云原生智能数据管理平台新功能发布|2025年3月版
数据库
百代繁华一朝都-绮罗生8 小时前
检查是否存在占用内存过大的SQL
数据库·sql
吾日三省吾码8 小时前
Python 脚本:自动化你的日常任务
数据库·python·自动化
CZIDC8 小时前
win11 系统环境下 新安装 WSL ubuntu + ssh + gnome 桌面环境
数据库·ubuntu·ssh
直裾8 小时前
Mapreduce的使用
大数据·数据库·mapreduce