07.MySQL内置函数
MySQL内置函数
日期函数
字符串函数
数学函数
其他函数
MySQL内置函数
MySQL内置函数是数据库操作中非常实用的工具,它们能够帮助开发者高效地处理各种数据类型,包括日期、字符串、数值等。这些函数不仅简化了SQL语句的编写,还能提升查询性能和代码可读性。本文将详细解析MySQL中常见的内置函数,涵盖日期函数、字符串函数、数学函数以及其他实用函数,并通过实际案例演示它们的应用场景。
日期函数
日期函数用于处理日期和时间相关的操作,比如获取当前时间、日期加减、计算日期差值等。以下是MySQL中常用的日期函数及其用法。
常用日期函数列表
函数名称 | 描述 |
---|---|
current_date() | 获取当前日期 |
current_time() | 获取当前时间 |
current_timestamp() | 获取当前时间戳 |
now() | 获取当前日期和时间 |
date(datetime) | 提取日期时间中的日期部分 |
date_add(date, interval d_value_type) | 在指定日期上增加时间间隔 |
date_sub(date, interval d_value_type) | 在指定日期上减少时间间隔 |
datediff(date1, date2) | 计算两个日期之间的天数差 |
函数详解
current_date()
函数
current_date()
用于获取当前的日期。例如:
SELECT current_date();
执行后会返回类似 2023-10-05
的日期。
current_time()
函数
current_time()
返回当前时间,不包含日期部分。例如:
SELECT current_time();
结果可能是 14:30:45
。
current_timestamp()
函数
current_timestamp()
返回完整的日期和时间信息,格式为 YYYY-MM-DD HH:MM:SS
。例如:
SELECT current_timestamp();
now()
函数
now()
和 current_timestamp()
类似,但 now()
的执行时间点是在语句开始时确定的,而 current_timestamp()
的执行时间点是在函数调用时确定的。
date(datetime)
函数
date()
函数用于提取日期时间中的日期部分。例如:
SELECT date('2023-10-05 14:30:45');
结果为 2023-10-05
。
date_add()
和 date_sub()
函数
这两个函数用于对日期进行加减操作。例如:
-- 在当前日期基础上加2天
SELECT date_add(current_date(), interval 2 day);-- 在当前日期基础上减1个月
SELECT date_sub(current_date(), interval 1 month);
如果传入的间隔值为负数,则效果相反。例如:
-- 相当于 date_sub
SELECT date_add(current_date(), interval -1 day);
datediff()
函数
datediff()
计算两个日期之间的天数差。例如:
SELECT datediff('2023-10-05', '2023-10-01');
结果为 4
。
综合案例
假设我们需要创建一个评论表,记录用户的评论时间。表结构如下:
CREATE TABLE comments (id INT AUTO_INCREMENT PRIMARY KEY,nickname VARCHAR(50),content TEXT,sendtime DATETIME
);
插入数据时可以直接使用 now()
指定时间:
INSERT INTO comments (nickname, content, sendtime)
VALUES ('用户A', '这是一条评论', now());
查询时若只需显示日期部分,可以用 date()
截取:
SELECT nickname, content, date(sendtime) AS comment_date FROM comments;
若需筛选最近2分钟的评论,可以结合 date_add()
和 now()
:
SELECT * FROM comments
WHERE sendtime > date_add(now(), interval -2 minute);
字符串函数
字符串函数用于处理文本数据,包括拼接、截取、替换、大小写转换等操作。
常用字符串函数列表
函数名称 | 描述 |
---|---|
charset(str) | 获取字符串使用的字符集 |
concat(str1, str2...) | 拼接多个字符串 |
instr(str, substr) | 查找子字符串在主字符串中的位置 |
ucase(str) | 将字符串转换为大写 |
lcase(str) | 将字符串转换为小写 |
left(str, length) | 从左侧开始截取指定长度的字符 |
length(str) | 获取字符串的字节长度 |
replace(str, old, new) | 替换字符串中的指定内容 |
strcmp(str1, str2) | 比较两个字符串的大小 |
substring(str, pos, len) | 从指定位置截取指定长度的子字符串 |
ltrim(str) / rtrim(str) / trim(str) | 去除字符串前/后/前后空格 |
函数详解
charset()
函数
charset()
返回字符串使用的字符集。例如:
SELECT charset('你好');
结果可能是 utf8mb4
。
concat()
函数
concat()
用于拼接多个字符串。例如:
SELECT concat('Hello', ' ', 'World');
结果为 Hello World
。
instr()
函数
instr()
查找子字符串首次出现的位置(从1开始)。例如:
SELECT instr('abcdef', 'cd');
结果为 3
。
ucase()
和 lcase()
函数
这两个函数分别将字符串转换为大写或小写:
SELECT ucase('hello'), lcase('WORLD');
结果分别为 HELLO
和 world
。
left()
函数
left()
从左侧截取指定长度的字符:
SELECT left('abcdef', 3);
结果为 abc
。
length()
函数
length()
返回字符串的字节长度。例如:
SELECT length('你好');
在 utf8mb4
编码下结果为 6
(每个汉字占3字节)。
replace()
函数
replace()
替换字符串中的内容:
SELECT replace('Hello World', 'World', 'MySQL');
结果为 Hello MySQL
。
strcmp()
函数
strcmp()
比较两个字符串的大小(区分大小写):
SELECT strcmp('abc', 'abd');
结果为 -1
(因为 c < d
)。
substring()
函数
substring()
从指定位置截取子字符串:
SELECT substring('abcdef', 2, 3);
结果为 bcd
。
ltrim()
/ rtrim()
/ trim()
函数
这些函数用于去除空格:
SELECT trim(' abc '); -- 结果为 'abc'
SELECT ltrim(' abc '); -- 结果为 'abc '
SELECT rtrim(' abc '); -- 结果为 ' abc'
综合案例
假设员工表 employees
包含姓名 ename
,要求显示首字母小写的姓名。可以使用以下方法:
SELECT concat(lcase(left(ename, 1)), substring(ename, 2)) AS formatted_name
FROM employees;
数学函数
数学函数用于处理数值计算,包括取绝对值、进制转换、四舍五入、随机数生成等。
常用数学函数列表
函数名称 | 描述 |
---|---|
abs(number) | 返回绝对值 |
bin(decimal) | 十进制转二进制 |
hex(decimal) | 十进制转十六进制 |
conv(number, from_base, to_base) | 进制转换 |
ceiling(number) | 向上取整 |
floor(number) | 向下取整 |
format(number, n) | 格式化数值(保留n位小数) |
rand() | 生成随机浮点数(范围 [0.0, 1.0)) |
mod(number, denominator) | 取余运算 |
函数详解
abs()
函数
返回绝对值:
SELECT abs(-100); -- 结果为 100
bin()
和 hex()
函数
将十进制转换为二进制或十六进制:
SELECT bin(10); -- 结果为 '1010'
SELECT hex(255); -- 结果为 'FF'
conv()
函数
进制转换示例:
SELECT conv('1010', 2, 10); -- 二进制转十进制(结果为10)
SELECT conv('FF', 16, 10); -- 十六进制转十进制(结果为255)
ceiling()
和 floor()
函数
向上/向下取整:
SELECT ceiling(3.2); -- 结果为 4
SELECT floor(3.9); -- 结果为 3
format()
函数
格式化数值并四舍五入:
SELECT format(12345.6789, 2); -- 结果为 '12,345.68'
rand()
函数
生成随机数:
SELECT rand(); -- 返回 [0.0, 1.0) 的随机数
mod()
函数
取余运算:
SELECT mod(10, 3); -- 结果为 1
其他函数
除了上述函数外,MySQL还提供了一些实用工具函数。
user()
函数
返回当前用户和主机名:
SELECT user(); -- 可能返回 'root@localhost'
md5()
函数
生成字符串的MD5摘要:
SELECT md5('password'); -- 返回32位十六进制字符串
database()
函数
显示当前使用的数据库:
SELECT database(); -- 返回当前数据库名
password()
函数
加密用户密码(已不推荐使用):
SELECT password('secret');
ifnull()
函数
处理NULL值:
SELECT ifnull(NULL, 'default'); -- 返回 'default'
通过以上函数的学习和实践,开发者可以更高效地处理MySQL中的各种数据操作需求。后续可根据实际业务场景灵活组合这些函数,实现更复杂的逻辑。