MySQL 常用函数使用指南:字符串、数值与日期处理
在 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_incrementID。
mysql> SELECT VERSION(), DATABASE(), USER();
总结
掌握这些基础函数能解决日常开发中大部分的数据格式化与简单逻辑处理需求。在实际编写 SQL 时,请注意字符集编码对 LENGTH 的影响,以及日期函数的时区设置。以上就是 MySQL 中常用函数的详细内容,更多关于 SQL 优化的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









