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');

结果分别为 HELLOworld

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中的各种数据操作需求。后续可根据实际业务场景灵活组合这些函数,实现更复杂的逻辑。

你可能感兴趣的:(MySQL,mysql,android,数据库,网络协议,网络,linux)