以下是 MySQL 常用字符串函数的分类汇总,包含语法示例及用途说明:
一、字符串连接与分割
CONCAT(str1, str2, ...)
- 用途:连接多个字符串。
- 示例:
SELECT CONCAT('Hello', ' ', 'World');
→Hello World
- 注意:若任一参数为
NULL
,结果返回NULL
。
CONCAT_WS(separator, str1, str2, ...)
- 用途:用指定分隔符连接字符串,自动忽略
NULL
。 - 示例:
SELECT CONCAT_WS('-', '2023', '10', NULL, '05');
→2023-10-05
- 用途:用指定分隔符连接字符串,自动忽略
GROUP_CONCAT([DISTINCT] expr [ORDER BY ...] [SEPARATOR sep])
- 用途:分组聚合时合并多行字符串。
- 示例:
SELECT GROUP_CONCAT(name SEPARATOR ', ') FROM users;
→Alice, Bob, Charlie
二、字符串截取与长度
SUBSTRING(str, start, length)
或SUBSTR(str, start, length)
- 用途:截取子字符串,
start
从 1 开始。 - 示例:
SELECT SUBSTRING('MySQL', 3, 2);
→SQ
- 用途:截取子字符串,
LEFT(str, length)
和RIGHT(str, length)
- 用途:截取左/右侧指定长度的字符串。
- 示例:
SELECT LEFT('Database', 4);
→Data
CHAR_LENGTH(str)
和LENGTH(str)
- 用途:字符数 vs 字节数(如 UTF-8 中汉字占 3 字节)。
- 示例:
SELECT CHAR_LENGTH('中文'), LENGTH('中文');
→2, 6
三、字符串转换与格式化
UPPER(str)
和LOWER(str)
- 用途:转换为大写或小写。
- 示例:
SELECT UPPER('Hello');
→HELLO
REVERSE(str)
- 用途:反转字符串。
- 示例:
SELECT REVERSE('abc');
→cba
FORMAT(number, decimal_places)
- 用途:格式化数字为字符串(添加千位分隔符)。
- 示例:
SELECT FORMAT(1234567.89, 2);
→1,234,567.89
四、字符串搜索与替换
LOCATE(substr, str, [start])
或INSTR(str, substr)
- 用途:返回子字符串首次出现的位置(从 1 开始),未找到返回 0。
- 示例:
SELECT LOCATE('SQL', 'MySQL');
→3
REPLACE(str, from_str, to_str)
- 用途:替换所有匹配的子字符串。
- 示例:
SELECT REPLACE('Hello World', 'World', 'MySQL');
→Hello MySQL
INSERT(str, start, length, new_str)
- 用途:从
start
位置开始替换length
长度的字符为new_str
。 - 示例:
SELECT INSERT('ABCDE', 2, 3, '123');
→A123E
- 用途:从
五、字符串填充与修剪
LPAD(str, length, pad_str)
和RPAD(str, length, pad_str)
- 用途:左/右填充字符串到指定长度。
- 示例:
SELECT LPAD('7', 3, '0');
→007
TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)
- 用途:去除首尾空格或指定字符。
- 示例:
SELECT TRIM(LEADING '#' FROM '##MySQL##');
→MySQL##
六、其他实用函数
REPEAT(str, count)
- 用途:重复字符串指定次数。
- 示例:
SELECT REPEAT('Ha', 3);
→HaHaHa
SPACE(count)
- 用途:生成指定数量的空格字符串。
- 示例:
SELECT CONCAT('Hello', SPACE(3), 'World');
→Hello World
STRCMP(str1, str2)
- 用途:比较字符串(0=相等,-1=str1<str2,1=str1>str2)。
- 示例:
SELECT STRCMP('apple', 'banana');
→-1
注意事项
- NULL 处理:多数函数遇到
NULL
参数返回NULL
(如CONCAT(NULL, 'a')
→NULL
)。 - 索引起始:字符串位置参数通常从 1 开始(而非 0)。
- 字符集影响:多字节字符集(如 UTF-8)会影响
LENGTH()
结果。
通过灵活组合这些函数,可高效完成复杂字符串处理任务。建议结合具体场景测试函数行为以确保符合预期。