标题:[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()
:- 支持整数和字符串输入,返回十六进制字符串。
完~
转载请注明出处
