以下是 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()结果。
通过灵活组合这些函数,可高效完成复杂字符串处理任务。建议结合具体场景测试函数行为以确保符合预期。
