MySQL 常用函数使用指南:字符串、数值与日期处理

听雨眠
听雨眠
发布时间:2026-10-13| 4人浏览过
原创

在 MySQL 数据库中,函数广泛应用于 SELECT、UPDATE 等语句中,用于高效处理字符串、数值、日期时间及系统状态。本文将系统梳理最常用的几类函数及其实际应用场景,配合标准 SQL 示例,帮助你快速上手数据 Manipulation。

1. 字符串函数实战

字符串是数据库中最常见的数据类型之一,MySQL 提供了丰富的函数用于拼接、比较、查找和修饰文本。

第1步:拼接与分隔符处理 (concat / concat_ws)

目的:将多个字段或字面量组合成一个完整的字符串。

动作:

  • CONCAT(s1, s2, ...):直接连接参数。若任一参数为 NULL,结果即为 NULL。
  • CONCAT_WS(sep, s1, s2, ...):带分隔符连接。第一个参数为分隔符。它会忽略后续参数中的 NULL,但分隔符本身若为 NULL 则返回 NULL。

示例验证:

mysql> SELECT CONCAT('my','s','ql');
-- 结果: 'mysql'

mysql> SELECT CONCAT_WS('-', '020', NULL, '87658907');
-- 结果: '020-87658907' (忽略了中间的NULL,保留了分隔符)

第2步:字符串比较 (strcmp)

目的:按字典序比较两个字符串的大小。

参数:SARG(str1, str2)

结果:若 str1 < str2 返回 -1;相等返回 0;大于返回 1。

mysql> SELECT STRCMP('abc', 'abd'); -- 结果: -1
mysql> SELECT STRCMP('abc', 'abb'); -- 结果: 1

第3步:长度统计 (length vs char_length)

注意:在多字节字符集(如 UTF-8)下,两者差异明显。

  • LENGTH(str):返回字节数。
  • CHAR_LENGTH(str):返回字符数(个数)。
mysql> SELECT LENGTH('mysql'), CHAR_LENGTH('mysql');
-- 结果: 5, 5

mysql> SELECT LENGTH('汉字'), CHAR_LENGTH('汉字');
-- 结果: 6(UTF-8下), 2 (每字占3字节,共2个字符)

第4步:大小写转换 (upper/lower)

动作:

  • 大写:UPPER() 或 UCASE()
  • 小写:LOWER() 或 LCASE()
mysql> SELECT UPPER('mysql'), LOWER('MYSQL');

第5步:位置查找与提取

场景A:在逗号分隔列表中查找位置 (FIND_IN_SET)

mysql> SELECT FIND_IN_SET('mysql', 'oracle,mysql,db2'); -- 结果: 2

场景B:子串起始位置 (LOCATE, INSTR)

LOCATE(substr, str) 和 INSTR(str, substr) 功能类似,返回第一次出现的位置(从1开始)。

mysql> SELECT LOCATE('sql', 'mysql'); -- 结果: 3

场景C:截取子串 (SUBSTRING, MID)

参数:SUBSTRING(str FROM pos FOR len) 或 SUBSTRING(str, pos, len)

mysql> SELECT SUBSTRING('zhaojd', 2, 3); -- 结果: 'hao'

第6步:清洗与替换

  • 去空格:TRIM() (默认去首尾)、LTRIM()、RTRIM()。
  • 位置替换 (INSERT):INSERT(str, pos, len, newstr) 用新串替换指定位置和长度的旧串。
  • 全局替换 (REPLACE):REPLACE(str, old, new) 将所有匹配的子串替换为新串。
mysql> SELECT REPLACE('this is mysql', 'mysql', 'oracle');
-- 结果: 'this is oracle'

2. 数值函数核心用法

第1步:取整与截断

  • CEIL(x):向上取整(大于等于x的最小整数)。
  • FLOOR(x):向下取整(小于等于x的最大整数)。
  • TRUNCATE(x, d):保留小数点后 d 位(直接截断,不四舍五入)。若 d 为负数,则在小数点左侧截断。
mysql> SELECT CEIL(4.3), FLOOR(4.3), TRUNCATE(903.53, 1);
-- 结果: 5, 4, 903.5

第2步:四舍五入 (ROUND)

ROUND(x [, d]):对 x 进行四舍五入至小数点后 d 位。

mysql> SELECT ROUND(903.53567, 2); -- 结果: 903.54

第3步:随机数 (RAND)

RAND() 返回 0-1 之间的随机浮点数。传入种子参数 RAND(x) 可产生固定的随机序列。

3. 日期和时间函数处理

第1步:获取当前时间点

  • NOW() / CURRENT_TIMESTAMP():返回完整的日期和时间(推荐使用)。
  • CURDATE():仅返回日期 'YYYY-MM-DD'。
  • CURTIME():仅返回时间 'HH:MM:SS'。

第2步:提取日期分量

使用专用函数获取特定部分:YEAR()`, MONTH()`, HOUR()`, MINUTE()`, SECOND()`。

综合提取 (EXTRACT):

mysql> SELECT EXTRACT(YEAR_MONTH FROM NOW());
-- 返回格式化为 YYYYMM 的整数

第3步:日期计算与差值

  • 增加/减少天数:ADDDATE(date, INTERVAL n DAY) 和 SUBDATE(date, INTERVAL n DAY)。
  • 计算天数差:DATEDIFF(date1, date2),返回 date1 - date2 的天数。
  • 添加时间片段:ADDTIME(time, expr) 用于增加秒、分、时。
mysql> SELECT DATEDIFF(NOW(), '2000-12-01');
-- 计算距离该日期的总天数

4. 系统信息函数

主要用于调试和获取连接上下文信息:

  • VERSION():MySQL 服务器版本。
  • DATABASE():当前选中的数据库名。
  • USER():当前连接用户。
  • LAST_INSERT_ID():返回最后一次自动增长的 auto_increment ID。
mysql> SELECT VERSION(), DATABASE(), USER();

总结

掌握这些基础函数能解决日常开发中大部分的数据格式化与简单逻辑处理需求。在实际编写 SQL 时,请注意字符集编码对 LENGTH 的影响,以及日期函数的时区设置。以上就是 MySQL 中常用函数的详细内容,更多关于 SQL 优化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。