一篇文章带你快速上手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)
相关推荐
CodeCraft Studio1 小时前
【实用技能】在 SQL Server 中使用 LIMIT 子句的替代方案
数据库·sql·sqlserver
2301_768212151 小时前
jmeter所用的mysql的jar包进行下载,可写jdbc协议
mysql·jar
jlting1952 小时前
HiveSQL 中判断字段是否包含某个值的方法
数据库·sql
求一个好offer拜托拜托2 小时前
SQL常见语法
数据库·sql
喵手2 小时前
PostgreSQL 增量备份:保护你的数据资产
数据库·postgresql
cliffordl2 小时前
SQLAlchemy 介绍与实践
数据库·python
文军的烹饪实验室2 小时前
sqlalchemy连接mysql数据库
数据库·mysql
安 当 加 密2 小时前
【安当产品应用案例100集】028-实现SQL Server数据库的透明加密
数据库·oracle
zybsjn2 小时前
如何产看SQL 查询的执行时间
数据库·sql
安迁岚2 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验二 数据库表
数据库·sql·mysql·oracle·实验报告