MySQL字符串函数全解析

发布于:2025-07-09 ⋅ 阅读:(22) ⋅ 点赞:(0)

MySQL 中 字符串函数 的详细讲解,涵盖常用函数分类、语法、示例及注意事项:


一、字符串基础操作函数

1. CONCAT(str1, str2, ...)

功能:连接多个字符串
示例

SELECT CONCAT('Hello', ' ', 'World');  -- 输出:'Hello World'
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM users;
2. CONCAT_WS(separator, str1, str2, ...)

功能:用指定分隔符连接字符串
示例

SELECT CONCAT_WS(', ', 'Apple', 'Banana', 'Orange');  -- 输出:'Apple, Banana, Orange'
3. LENGTH(str) / CHAR_LENGTH(str)

区别

  • LENGTH():返回字节数(受字符集影响)
  • CHAR_LENGTH():返回字符数
    示例
SELECT LENGTH('中国');    -- UTF8 中文字符占3字节 → 6
SELECT CHAR_LENGTH('中国'); -- 字符数 → 2

二、字符串截取与拆分

1. SUBSTRING(str, start, length)

功能:从位置 start 截取 length 个字符(下标从 1 开始)
别名SUBSTR(), MID()
示例

SELECT SUBSTRING('MySQL Tutorial', 7, 5); -- 输出:'Tutor'
2. LEFT(str, len) / RIGHT(str, len)

功能:截取左/右侧指定长度的字符
示例

SELECT LEFT('Database', 4);  -- 输出:'Data'
SELECT RIGHT('Database', 4); -- 输出:'base'
3. SUBSTRING_INDEX(str, delimiter, count)

功能:按分隔符截取部分字符串

  • count > 0:从左开始取
  • count < 0:从右开始取
    示例
SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);  -- 输出:'www.mysql'
SELECT SUBSTRING_INDEX('www.mysql.com', '.', -1); -- 输出:'com'

三、字符串搜索与定位

1. LOCATE(substr, str, [start])

功能:返回子串首次出现的位置(找不到返回0)
别名POSITION(substr IN str)
示例

SELECT LOCATE('SQL', 'MySQL SQL');  -- 输出:3 (从第1个字符开始找)
SELECT LOCATE('SQL', 'MySQL SQL', 5); -- 从第5位开始找 → 7
2. INSTR(str, substr)

功能:同 LOCATE,但参数顺序相反
示例

SELECT INSTR('MySQL', 'SQL'); -- 输出:3

四、字符串替换与修改

1. REPLACE(str, from_str, to_str)

功能:替换所有匹配的子串
示例

SELECT REPLACE('I like cats', 'cats', 'dogs'); -- 输出:'I like dogs'
2. INSERT(str, pos, len, newstr)

功能:从位置 pos 开始替换 len 个字符为 newstr
示例

SELECT INSERT('Hello World', 7, 5, 'MySQL'); -- 输出:'Hello MySQL'
3. TRIM([{BOTH|LEADING|TRAILING} [remstr] FROM] str)

功能:去除首尾指定字符(默认去空格)
示例

SELECT TRIM('  MySQL  ');             -- 输出:'MySQL'
SELECT TRIM(LEADING 'x' FROM 'xxxSQLxxx'); -- 输出:'SQLxxx'

五、大小写转换

1. UPPER(str) / UCASE(str)

功能:转大写
示例

SELECT UPPER('Hello'); -- 输出:'HELLO'
2. LOWER(str) / LCASE(str)

功能:转小写
示例

SELECT LOWER('SQL'); -- 输出:'sql'

六、字符串填充

1. LPAD(str, len, padstr)

功能:左侧填充至长度 len
示例

SELECT LPAD('7', 3, '0'); -- 输出:'007'
2. RPAD(str, len, padstr)

功能:右侧填充至长度 len
示例

SELECT RPAD('Hi', 5, '!'); -- 输出:'Hi!!!'

七、字符串比较与格式化

1. STRCMP(expr1, expr2)

功能:比较字符串

  • 返回 0:相等
  • 返回 1expr1 > expr2
  • 返回 -1expr1 < expr2
    示例
SELECT STRCMP('apple', 'banana'); -- 输出:-1
2. FORMAT(X, D)

功能:数字格式化(千位分隔,四舍五入)
示例

SELECT FORMAT(1234567.4567, 2); -- 输出:'1,234,567.46'

八、其他实用函数

1. REPEAT(str, count)

功能:重复字符串

SELECT REPEAT('Ha', 3); -- 输出:'HaHaHa'
2. REVERSE(str)

功能:反转字符串

SELECT REVERSE('SQL'); -- 输出:'LQS'
3. SPACE(N)

功能:生成 N 个空格

SELECT CONCAT('Hello', SPACE(3), 'World'); -- 输出:'Hello   World'

九、实战应用场景

场景1:格式化电话号码
SELECT 
    phone,
    CONCAT(
        SUBSTRING(phone, 1, 3),
        '-',
        SUBSTRING(phone, 4, 4),
        '-',
        SUBSTRING(phone, 8, 4)
    ) AS formatted_phone
FROM contacts;
场景2:提取邮箱域名
SELECT 
    email,
    SUBSTRING_INDEX(email, '@', -1) AS domain 
FROM users;
场景3:安全显示敏感信息
SELECT 
    CONCAT(
        LEFT(card_number, 4),
        REPEAT('*', LENGTH(card_number) - 8),
        RIGHT(card_number, 4)
    ) AS masked_card
FROM payments;

十、注意事项

  1. 字符集影响
    • 函数如 LENGTH()utf8mb4 中可能返回意外字节数(如表情符号占4字节)
  2. NULL 处理
    • 输入参数为 NULL 时,大多数函数返回 NULL
    SELECT CONCAT('Hello', NULL); -- 输出:NULL
    
  3. 性能优化
    • 避免在 WHERE 条件中对列使用函数(如 WHERE UPPER(name) = 'JOHN'),会导致索引失效
  4. 多字节字符
    • 使用 CHAR_LENGTH() 替代 LENGTH() 处理多语言文本

总结对比表

函数类别 常用函数 核心用途
连接 CONCAT, CONCAT_WS 字符串拼接
长度计算 LENGTH, CHAR_LENGTH 字节/字符数统计
截取 SUBSTRING, LEFT, RIGHT 提取子串
定位 LOCATE, INSTR 查找子串位置
替换 REPLACE, INSERT 修改字符串内容
空白处理 TRIM, LTRIM, RTRIM 去除首尾字符
大小写 UPPER, LOWER 转换大小写
填充 LPAD, RPAD 按长度填充字符串
实用工具 REPEAT, REVERSE, SPACE 生成特定格式字符串

网站公告

今日签到

点亮在社区的每一天
去签到