标题:[MySQL初阶]MySQL(5)内置函数详解
@水墨不写bug

文章目录
- 一、日期函数
-
- [1. current_date()](#1. current_date())
- [2. current_time()](#2. current_time())
- [3. current_timestamp()](#3. current_timestamp())
- [4. date(datetime)](#4. date(datetime))
- [5. date_add(date, interval expr unit)](#5. date_add(date, interval expr unit))
- [6. date_sub(date, interval expr unit)](#6. date_sub(date, interval expr unit))
- [7. datediff(date1, date2)](#7. datediff(date1, date2))
- [8. now()](#8. now())
- 9.日期函数总结&&注意事项
- 二、字符串函数
-
- [1. charset(str)](#1. charset(str))
- [2. concat(string1, string2 [, ...])](#2. concat(string1, string2 [, ...]))
- [3. instr(string, substring)](#3. instr(string, substring))
- [4. ucase(string)](#4. ucase(string))
- [5. lcase(string)](#5. lcase(string))
- [6. left(string, length)](#6. left(string, length))
- [7. length(string)](#7. length(string))
- [8. replace(str, search_str, replace_str)](#8. replace(str, search_str, replace_str))
- [9. strcmp(string1, string2)](#9. strcmp(string1, string2))
- [10. substring(str, position [, length])](#10. substring(str, position [, length]))
- [11. ltrim(string)](#11. ltrim(string))
- 12.字符串函数注意事项
- 三、数学函数
-
- [1. `ABS(number)`](#1.
ABS(number)) - [2. `BIN(decimal_number)`](#2.
BIN(decimal_number)) - [3. `HEX(decimalNumber)`](#3.
HEX(decimalNumber)) - [4. `CONV(number, from_base, to_base)`](#4.
CONV(number, from_base, to_base)) - [5. `CEILING(number)`](#5.
CEILING(number)) - [6. `FLOOR(number)`](#6.
FLOOR(number)) - [7. `FORMAT(number, decimal_places)`](#7.
FORMAT(number, decimal_places)) - [8. `RAND()`](#8.
RAND()) - [9. `MOD(number, denominator)`](#9.
MOD(number, denominator)) - 10.数学函数总结与注意事项
- [1. `ABS(number)`](#1.
一、日期函数
接下来我将会按照表中罗列的函数来依次讲解MySQL内置函数。
1. current_date()
-
描述:返回当前系统日期(不包含时间)。
-
语法 :
CURRENT_DATE()或CURRENT_DATE。 -
返回值 :格式为
YYYY-MM-DD。 -
示例 :
sqlSELECT current_date()或者current_date; -- 返回 '2025-03-05'
2. current_time()
-
描述:返回当前系统时间(不包含日期)。
-
语法 :
CURRENT_TIME()或CURRENT_TIME。 -
返回值 :格式为
HH:MM:SS。 -
示例 :
sqlSELECT current_time(); -- 返回 '14:30:45'
3. current_timestamp()
-
描述 :返回当前系统的日期和时间(即
时间戳)。 -
语法 :
CURRENT_TIMESTAMP()或CURRENT_TIMESTAMP。 -
返回值 :格式为
YYYY-MM-DD HH:MM:SS。 -
示例 :
sqlSELECT current_timestamp(); -- 返回 '2025-03-05 14:30:50'
4. date(datetime)
-
描述:从日期时间值中提取日期部分。
-
参数 :
datetime(日期时间类型的值)。 -
返回值 :格式为
YYYY-MM-DD。 -
示例 :
sqlSELECT date('2023-10-05 14:30:45'); -- 返回 '2023-10-05'
5. date_add(date, interval expr unit)
-
描述 :在指定日期/时间上
添加一个时间间隔。 -
参数 :
date:原始日期或时间。expr:数值(正数表示增加,负数表示减少)。unit:时间单位(支持YEAR、DAY、MINUTE、SECOND等)。
-
返回值:新的日期/时间。
-
示例 :
sqlSELECT date_add('2025-10-05', interval 3 day); -- 返回 '2025-10-08' SELECT date_add('14:20:45', interval 10 minute); -- 返回 '14:30:45'
6. date_sub(date, interval expr unit)
-
描述:在指定 日期/时间 上减去一个时间间隔。
-
参数 :与
date_add类似。 -
返回值:新的日期/时间。
-
示例 :
sqlSELECT date_sub('2023-10-05', interval 1 year); -- 返回 '2022-10-05' SELECT date_sub('10:30:45', interval 30 second); -- 返回 '10:30:15'
7. datediff(date1, date2)
-
描述 :计算两个日期之间的天数差(
date1 - date2),前 - 后。 -
参数 :两个日期值(格式需为
YYYY-MM-DD)。 -
返回值 :整数(正数或负数);
前 > 后 为正;前 < 后为负。 -
示例 :
sqlSELECT datediff('2023-10-10', '2023-10-05'); -- 返回 5 SELECT datediff('2023-10-01', '2023-10-15'); -- 返回 -14
8. now()
-
描述 :返回当前系统的日期和时间(与
current_timestamp()功能相同)。 -
语法 :
NOW()。 -
返回值 :格式为
YYYY-MM-DD HH:MM:SS。 -
示例 :
sqlSELECT now(); -- 返回 '2023-10-05 14:30:45'
9.日期函数总结&&注意事项
- 单位兼容性 :
date_add和date_sub的unit需与date类型匹配。例如,对日期使用MINUTE会返回NULL。 - 时间格式 :若参数格式错误(如非日期字符串),函数可能返回
NULL。 - 函数别名 :
current_date()等价于curdate()。now()等价于current_timestamp()。
二、字符串函数
接下来我会对上述表格函数一一详解:
1. charset(str)
-
描述 :返回字符串
str的字符集名称。 -
参数 :
str(字符串)。 -
返回值 :字符集名称(如
utf8mb4、latin1)。 -
示例 :
sqlSELECT charset('abc'); -- 返回当前连接的字符集,一般是 'utf8mb4'
2. concat(string1, string2 [, ...])
-
描述:将多个字符串连接成一个字符串。
-
参数:至少两个字符串,支持多个参数。
-
返回值 :拼接后的字符串。若任一参数为
NULL,则返回NULL。 -
示例 :
sqlSELECT concat('My', 'SQL'); -- 返回 'MySQL' SELECT concat('Hello', NULL, 'World'); -- 返回 NULL
特殊注意 : concat(string1, string2 [, ...])若任一参数为 NULL,则返回 NULL
3. instr(string, substring)
-
描述 :返回子字符串
substring在string中首次出现的位置,如果没有出现过,则返回0。 -
参数 :
string:主字符串。substring:要查找的子字符串。
-
返回值 :位置索引(从
1开始),未找到返回0。 -
示例 :
sqlSELECT instr('foobarbaz', 'bar'); -- 返回 4 SELECT instr('apple', 'z'); -- 返回 0
4. ucase(string)
-
描述:将字符串转换为大写。
-
别名 :
upper()。 -
示例 :
sqlSELECT ucase('Hello'); -- 返回 'HELLO'
5. lcase(string)
-
描述:将字符串转换为小写。
-
别名 :
lower()。 -
示例 :
sqlSELECT lcase('HELLO'); -- 返回 'hello'
6. left(string, length)
- 描述:从字符串左侧截取指定长度的字符。
- 参数:
string:原始字符串。length:截取长度(若为负数返回空字符串)。- 示例:
sql
SELECT left('Hello World', 5); -- 返回 'Hello'
类似的还有right(string,length),在这里不再赘述。
7. length(string)
- 描述:返回字符串的字节长度(与字符集相关)。
- 注意 :若需字符数,使用
char_length()。 - 示例:
sql
SELECT length('中国66'); -- 若字符集为 utf8mb4,返回 8(每个汉字占3字节,ASCII字符占一个字节)
SELECT char_length('中国66'); -- 返回 4(不论汉字,还是ASCII都算一个字符)
char_length()不论汉字,还是ASCII都算一个字符:

8. replace(str, search_str, replace_str)
-
描述 :将
str中所有search_str替换为replace_str。 -
参数 :
str:原始字符串。search_str:被替换的子字符串。replace_str:替换后的字符串。
-
示例 :
sqlSELECT replace('banana', 'a', 'o'); -- 返回 'bonono' SELECT replace('banana',,'a','中国'); -- 见图片

9. strcmp(string1, string2)
-
描述 :逐字符比较两个字符串的大小(基于字符的ASCII值);
类似于C的<string.h>内的strcmp函数. -
返回值 :
0:两字符串相等。1:string1>string2。-1:string1<string2。
-
示例 :
sqlSELECT strcmp('apple', 'apple'); -- 返回 0 SELECT strcmp('zoo', 'apple'); -- 返回 1
10. substring(str, position [, length])
-
描述 :从
position开始截取str的字符,可指定截取长度。 -
参数 :
position:起始位置(从1开始,负数表示从末尾倒数)。length:可选,截取长度。
-
示例 :
sqlSELECT substring('Hello World', 7); -- 返回 'World' SELECT substring('Hello', -3, 2); -- 返回 'lo'
11. ltrim(string)
-
描述 :去除字符串的前导空格(仅左侧)。
-
注意 :去除尾部空格使用
rtrim(),去除两端空格使用trim(),这两个函数与本函数类似。 -
示例 :
sqlSELECT ltrim(' Hello'); -- 返回 'Hello'
12.字符串函数注意事项
- 字符集影响 :
length()返回字节长度,char_length()返回字符数。 - NULL处理 :
concat()中若存在NULL,结果直接为NULL。 - 函数别名 :
ucase()等价于upper()。lcase()等价于lower()。
- 索引范围 :
substring()的position支持负数,表示从右向左计数。
三、数学函数

1. ABS(number)
-
描述:返回数字的绝对值。
-
参数 :
number(整数或浮点数)。 -
返回值 :非负数,例如
ABS(-5)返回5,ABS(-3.2)返回3.2。 -
示例 :
sqlSELECT ABS(-10); -- 输出 10
2. BIN(decimal_number)
-
描述:将十进制整数转换为二进制字符串(MySQL特有)。
-
参数 :
decimal_number(十进制整数)。 -
返回值 :二进制字符串,例如
BIN(10)返回'1010'(无前缀)。 -
注意:仅支持整数输入,若输入小数,则返回整数部分。仅支持正数,输入负数则返回其补码。
-
示例:
sqlSELECT BIN(5); -- 输出 '101'示例 :仅支持整数输入,若输入小数,则返回整数部分。
示例 :仅支持正数,输入负数则返回其补码。
在计算机中,负数以补码形式存储。-1的补码是其绝对值(1)的二进制取反后加1。例如,对于8位整数:1的二进制:00000001
取反后:11111110
加1得到补码:11111111(即全1)。
3. HEX(decimalNumber)
-
描述:将十进制整数或字符串转换为十六进制字符串。
-
参数 :
decimalNumber(整数或字符串)。 -
返回值 :十六进制字符串,例如
HEX(255)返回'FF',HEX('abc')返回'616263'。 -
示例 :
sqlSELECT HEX(16); -- 输出 '10'
4. CONV(number, from_base, to_base)
-
描述:将数字从一种进制转换为另一种进制。
-
参数 :
number:原始进制的数字(字符串形式,例如'A'表示十六进制的10)。from_base:原始进制(2-36)。to_base:目标进制(2-36)。
-
返回值 :目标进制的字符串,例如
CONV('A', 16, 2)返回'1010'。 -
示例 :
sqlSELECT CONV(10, 10, 2); -- 输出 '1010'
5. CEILING(number)
-
描述:向上取整,返回不小于输入值的最小整数。
-
参数 :
number(整数或浮点数)。 -
返回值 :整数,例如
CEILING(3.2)返回4,CEILING(-2.3)返回-2。 -
别名 :
CEIL()(MySQL中两者均可)。 -
示例 :
sqlSELECT CEILING(4.1); -- 输出 5
6. FLOOR(number)
-
描述:向下取整,返回不大于输入值的最大整数。
-
参数 :
number(整数或浮点数)。 -
返回值 :整数,例如
FLOOR(3.8)返回3,FLOOR(-2.7)返回-3。 -
示例 :
sqlSELECT FLOOR(5.9); -- 输出 5
7. FORMAT(number, decimal_places)
-
描述:格式化数字,保留指定小数位数并添加千位分隔符。
-
参数 :
number:浮点数。decimal_places:保留的小数位数(整数)。
-
返回值 :字符串,例如
FORMAT(1234.567, 2)返回'1,234.57'(四舍五入)。 -
注意 :与
ROUND()不同,FORMAT主要用于显示格式化,结果类型为字符串。 -
示例 :
sqlSELECT FORMAT(123456.789, 1); -- 输出 '123,456.8'
8. RAND()
-
描述 :生成
[0.0, 1.0)范围内的随机浮点数。 -
参数:无。
-
返回值 :随机浮点数,例如
0.548813。 -
扩展用法 :结合
RAND(N)可指定种子值(N为整数),生成可重复的随机序列。 -
示例 :
sqlSELECT RAND(); -- 输出 0.123456(随机值)
9. MOD(number, denominator)
-
描述:取模运算(求余数)。
-
参数 :
number:被除数。denominator:除数。
-
返回值 :余数,例如
MOD(10, 3)返回1,MOD(-7, 3)返回-1。 -
注意:MySQL中余数符号与被除数一致。
-
示例 :
sqlSELECT MOD(10, 3); -- 输出 1
10.数学函数总结与注意事项
-
BIN()与CONV():BIN()是 MySQL 特有函数,直接返回二进制字符串。- 若需其他进制转换,使用
CONV(number, from_base, to_base)。
-
FORMAT():- 主要用于格式化输出(添加千位分隔符),而非单纯保留小数位数。若需四舍五入,可结合
ROUND(number, decimal_places)使用。
- 主要用于格式化输出(添加千位分隔符),而非单纯保留小数位数。若需四舍五入,可结合
-
HEX():- 支持整数和字符串输入,返回十六进制字符串。
完~
转载请注明出处
