标题:[MySQL初阶]MySQL(5)内置函数详解
@水墨不写bug
文章目录
- 一、日期函数
- 1. current_date()
- 2. current_time()
- 3. current_timestamp()
- 4. date(datetime)
- 5. date_add(date, interval expr unit)
- 6. date_sub(date, interval expr unit)
- 7. datediff(date1, date2)
- 8. now()
- 9.日期函数总结&&注意事项
- 二、字符串函数
- 1. charset(str)
- 2. concat(string1, string2 [, ...])
- 3. instr(string, substring)
- 4. ucase(string)
- 5. lcase(string)
- 6. left(string, length)
- 7. length(string)
- 8. replace(str, search_str, replace_str)
- 9. strcmp(string1, string2)
- 10. substring(str, position [, length])
- 11. ltrim(string)
- 12.字符串函数注意事项
- 三、数学函数
- 1. `ABS(number)`
- 2. `BIN(decimal_number)`
- 3. `HEX(decimalNumber)`
- 4. `CONV(number, from_base, to_base)`
- 5. `CEILING(number)`
- 6. `FLOOR(number)`
- 7. `FORMAT(number, decimal_places)`
- 8. `RAND()`
- 9. `MOD(number, denominator)`
- 10.数学函数总结与注意事项
一、日期函数
接下来我将会按照表中罗列的函数来依次讲解MySQL内置函数。
1. current_date()
- 描述:返回当前系统日期(不包含时间)。
- 语法:
CURRENT_DATE()
或CURRENT_DATE
。 - 返回值:格式为
YYYY-MM-DD
。 - 示例:
SELECT current_date()或者current_date; -- 返回 '2025-03-05'
2. current_time()
- 描述:返回当前系统时间(不包含日期)。
- 语法:
CURRENT_TIME()
或CURRENT_TIME
。 - 返回值:格式为
HH:MM:SS
。 - 示例:
SELECT current_time(); -- 返回 '14:30:45'
3. current_timestamp()
- 描述:返回当前系统的日期和时间(即
时间戳
)。 - 语法:
CURRENT_TIMESTAMP()
或CURRENT_TIMESTAMP
。 - 返回值:格式为
YYYY-MM-DD HH:MM:SS
。 - 示例:
SELECT current_timestamp(); -- 返回 '2025-03-05 14:30:50'
4. date(datetime)
- 描述:从日期时间值中提取日期部分。
- 参数:
datetime
(日期时间类型的值)。 - 返回值:格式为
YYYY-MM-DD
。 - 示例:
SELECT date('2023-10-05 14:30:45'); -- 返回 '2023-10-05'
5. date_add(date, interval expr unit)
- 描述:在指定日期/时间上
添加
一个时间间隔。 - 参数:
date
:原始日期或时间。expr
:数值(正数表示增加,负数表示减少)。unit
:时间单位(支持YEAR
、DAY
、MINUTE
、SECOND
等)。
- 返回值:新的日期/时间。
- 示例:
SELECT 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
类似。 - 返回值:新的日期/时间。
- 示例:
SELECT 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
)。 - 返回值:整数(正数或负数);
前 > 后 为正
;前 < 后为负
。 - 示例:
SELECT 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
。 - 示例:
SELECT 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
)。 - 示例:
SELECT charset('abc'); -- 返回当前连接的字符集,一般是 'utf8mb4'
2. concat(string1, string2 [, …])
- 描述:将多个字符串连接成一个字符串。
- 参数:至少两个字符串,支持多个参数。
- 返回值:拼接后的字符串。若任一参数为
NULL
,则返回NULL
。 - 示例:
SELECT 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
。 - 示例:
SELECT instr('foobarbaz', 'bar'); -- 返回 4 SELECT instr('apple', 'z'); -- 返回 0
4. ucase(string)
- 描述:将字符串转换为大写。
- 别名:
upper()
。 - 示例:
SELECT ucase('Hello'); -- 返回 'HELLO'
5. lcase(string)
- 描述:将字符串转换为小写。
- 别名:
lower()
。 - 示例:
SELECT lcase('HELLO'); -- 返回 'hello'
6. left(string, length)
- 描述:从字符串左侧截取指定长度的字符。
- 参数:
string
:原始字符串。length
:截取长度(若为负数返回空字符串)。- 示例:
SELECT left('Hello World', 5); -- 返回 'Hello'
类似的还有right(string,length),在这里不再赘述。
7. length(string)
- 描述:返回字符串的字节长度(与字符集相关)。
- 注意:若需字符数,使用
char_length()
。 - 示例:
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
:替换后的字符串。
- 示例:
SELECT 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
。
- 示例:
SELECT strcmp('apple', 'apple'); -- 返回 0 SELECT strcmp('zoo', 'apple'); -- 返回 1
10. substring(str, position [, length])
- 描述:从
position
开始截取str
的字符,可指定截取长度。 - 参数:
position
:起始位置(从1
开始,负数表示从末尾倒数)。length
:可选,截取长度。
- 示例:
SELECT substring('Hello World', 7); -- 返回 'World' SELECT substring('Hello', -3, 2); -- 返回 'lo'
11. ltrim(string)
- 描述:去除字符串的前导空格(仅左侧)。
- 注意:去除尾部空格使用
rtrim()
,去除两端空格使用trim()
,这两个函数与本函数类似。 - 示例:
SELECT 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
。 - 示例:
SELECT ABS(-10); -- 输出 10
2. BIN(decimal_number)
-
描述:将十进制整数转换为二进制字符串(MySQL特有)。
-
参数:
decimal_number
(十进制整数)。 -
返回值:二进制字符串,例如
BIN(10)
返回'1010'
(无前缀)。 -
注意:仅支持整数输入,若输入小数,则返回整数部分。仅支持正数,输入负数则返回其补码。
-
示例:
SELECT BIN(5); -- 输出 '101'
示例:仅支持整数输入,若输入小数,则返回整数部分。
示例:仅支持正数,输入负数则返回其补码。
在计算机中,负数以补码形式存储。-1的补码是其绝对值(1)的二进制取反后加1。例如,对于8位整数:
1的二进制:00000001
取反后:11111110
加1得到补码:11111111(即全1)。
3. HEX(decimalNumber)
- 描述:将十进制整数或字符串转换为十六进制字符串。
- 参数:
decimalNumber
(整数或字符串)。 - 返回值:十六进制字符串,例如
HEX(255)
返回'FF'
,HEX('abc')
返回'616263'
。 - 示例:
SELECT 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'
。 - 示例:
SELECT CONV(10, 10, 2); -- 输出 '1010'
5. CEILING(number)
- 描述:向上取整,返回不小于输入值的最小整数。
- 参数:
number
(整数或浮点数)。 - 返回值:整数,例如
CEILING(3.2)
返回4
,CEILING(-2.3)
返回-2
。 - 别名:
CEIL()
(MySQL中两者均可)。 - 示例:
SELECT CEILING(4.1); -- 输出 5
6. FLOOR(number)
- 描述:向下取整,返回不大于输入值的最大整数。
- 参数:
number
(整数或浮点数)。 - 返回值:整数,例如
FLOOR(3.8)
返回3
,FLOOR(-2.7)
返回-3
。 - 示例:
SELECT FLOOR(5.9); -- 输出 5
7. FORMAT(number, decimal_places)
- 描述:格式化数字,保留指定小数位数并添加千位分隔符。
- 参数:
number
:浮点数。decimal_places
:保留的小数位数(整数)。
- 返回值:字符串,例如
FORMAT(1234.567, 2)
返回'1,234.57'
(四舍五入)。 - 注意:与
ROUND()
不同,FORMAT
主要用于显示格式化,结果类型为字符串。 - 示例:
SELECT FORMAT(123456.789, 1); -- 输出 '123,456.8'
8. RAND()
- 描述:生成
[0.0, 1.0)
范围内的随机浮点数。 - 参数:无。
- 返回值:随机浮点数,例如
0.548813
。 - 扩展用法:结合
RAND(N)
可指定种子值(N
为整数),生成可重复的随机序列。 - 示例:
SELECT RAND(); -- 输出 0.123456(随机值)
9. MOD(number, denominator)
- 描述:取模运算(求余数)。
- 参数:
number
:被除数。denominator
:除数。
- 返回值:余数,例如
MOD(10, 3)
返回1
,MOD(-7, 3)
返回-1
。 - 注意:MySQL中余数符号与被除数一致。
- 示例:
SELECT MOD(10, 3); -- 输出 1
10.数学函数总结与注意事项
-
BIN()
与CONV()
:BIN()
是 MySQL 特有函数,直接返回二进制字符串。- 若需其他进制转换,使用
CONV(number, from_base, to_base)
。
-
FORMAT()
:- 主要用于格式化输出(添加千位分隔符),而非单纯保留小数位数。若需四舍五入,可结合
ROUND(number, decimal_places)
使用。
- 主要用于格式化输出(添加千位分隔符),而非单纯保留小数位数。若需四舍五入,可结合
-
HEX()
:- 支持整数和字符串输入,返回十六进制字符串。
完~
转载请注明出处