处理文本数据的利器:MySQL 字符串函数
字符串函数在 MySQL 中主要用于字符串的拼接、截取、替换、查找和大小写转换等操作。以下是开发中最常用的几类字符串函数及其详细说明。
3. 字符串截取:SUBSTRING () / SUBSTR ()
核心作用:从字符串中提取指定部分。这两个函数在语法上完全一致,SUBSTR 是 SUBSTRING 的简写。
函数语法:
SUBSTRING(str, start, length)
: 目标字符串;str: 起始位置(正数从左开始,负数从右开始);start: 可选参数,截取长度(省略则截取到字符串末尾)。length
实战示例:
-- 1. 从左侧截取(start 为正数) SELECT SUBSTRING('13800138000', 1, 3) AS phone_prefix; -- 结果:138(截取前3位) -- 2. 从右侧截取(start 为负数) SELECT SUBSTRING('13800138000', -4) AS phone_suffix; -- 结果:8000(截取最后4位,省略length) -- 场景:隐藏手机号中间4位 SELECT CONCAT(SUBSTR(phone,1,3), '****', SUBSTR(phone,-4)) AS hide_phone FROM user;
5. 大小写转换:UPPER () / LOWER ()
核心作用:将字符串转换为大写或小写。这在统一查询条件时非常有用,可以避免因大小写不同而产生的问题。
函数语法:
UPPER(str): 转换为大写;UCASE(str)LOWER(str): 转换为小写。LCASE(str)
实战示例:
SELECT UPPER('mysql') AS upper_str; -- 结果:MYSQL SELECT LOWER('MYSQL FUNCTION') AS lower_str; -- 结果:mysql function -- 场景:不区分大小写查询用户名 SELECT * FROM user WHERE LOWER(username) = LOWER('ZhangSan');
1. 字符串拼接:CONCAT () / CONCAT_WS ()
核心作用:将多个字符串合并成一个字符串,适用于字段合并场景(如姓名 + 手机号、地址拼接)。
函数语法:
: 直接拼接多个字符串, 任意一个参数为 NULL 时,结果为 NULL 。CONCAT(str1, str2, ...): 指定分隔符(separator)拼接, 自动忽略 NULL 值 (推荐日常使用)。CONCAT_WS(separator, str1, str2, ...)
实战示例:
-- 1. CONCAT 拼接(注意 NULL 影响) SELECT CONCAT('张三', '-', '13800138000') AS full_info; -- 结果:张三-13800138000 SELECT CONCAT('李四', '-', NULL) AS full_info; -- 结果:NULL(有 NULL 则整体为 NULL) -- 2. CONCAT_WS 拼接(忽略 NULL,推荐) SELECT CONCAT_WS('-', '北京市', '朝阳区', '建国路', NULL) AS full_address; -- 结果:北京市-朝阳区-建国路
4. 字符串替换:REPLACE ()
核心作用:将字符串中的指定子串替换成另一个子串。常用于数据清洗,例如去除特殊字符或统一格式。
函数语法:
: 将 str 中的 old_str 替换为 new_str。REPLACE(str, old_str, new_str)
实战示例:
-- 1. 替换特殊字符 SELECT REPLACE('MySQL@2025#', '@#', '') AS clean_str; -- 结果:MySQL2025(去除@和#) -- 2. 统一日期格式(将 / 替换为 -) SELECT REPLACE('2025/11/20', '/', '-') AS standard_date; -- 结果:2025-11-20 -- 场景:清洗用户输入的空格 UPDATE user SET username = REPLACE(username, ' ', '') WHERE username LIKE '% %';
6. 去除空格:TRIM () / LTRIM () / RTRIM ()
核心作用:去除字符串前后的多余空格。这在处理用户输入时非常常见。
函数语法:
: 去除字符串前后两端的空格;TRIM(str): 仅去除左侧空格;LTRIM(str): 仅去除右侧空格。RTRIM(str)
实战示例:
SELECT TRIM(' MySQL 函数 ') AS trim_str; -- 结果:MySQL 函数(前后空格去除) SELECT LTRIM(' 左侧空格 ') AS ltrim_str; -- 结果:左侧空格 (仅左侧去除) SELECT RTRIM(' 右侧空格 ') AS rtrim_str; -- 结果: 右侧空格(仅右侧去除) -- 场景:清洗用户注册时的用户名空格 INSERT INTO user (username) VALUES (TRIM(' LiSi ')); -- 存储为:LiSi
2. 字符串长度:LENGTH () / CHAR_LENGTH ()
核心作用:获取字符串的字节长度或字符长度。在处理中文时,区分这两种长度非常重要。
函数语法:
: 返回字符串的字节长度(UTF-8 编码下,1 个中文 = 3 个字节,1 个英文 = 1 个字节)。LENGTH(str): 返回字符串的字符长度(无论中英文,1 个字符 = 1 长度)。CHAR_LENGTH(str)
实战示例:
-- 处理中文时的差异(UTF-8 编码) SELECT LENGTH('MySQL 字符串函数') AS byte_len, -- 结果:17(6个英文+1个空格+5个中文=6+1+5*3=17) CHAR_LENGTH('MySQL 字符串函数') AS char_len; -- 结果:12(6+1+5=12) -- 场景:校验用户名长度(要求 2-10 个字符) SELECT username FROM user WHERE CHAR_LENGTH(username) BETWEEN 2 AND 10;
7. 字符串查找:LOCATE () / INSTR ()
核心作用:在目标字符串中查找子串的位置。如果找不到则返回 0。
函数语法:
: 从 start 位置开始查找 substr 在 str 中的位置(start 可选,默认从 1 开始);LOCATE(substr, str, start): 功能与 LOCATE 相同,但参数顺序相反(str 在前,substr 在后)。INSTR(str, substr)
实战示例:
SELECT LOCATE('函数', 'MySQL 字符串函数') AS pos; -- 结果:8(子串从第8个字符开始) SELECT INSTR('MySQL 字符串函数', '字符串') AS pos; -- 结果:7 SELECT LOCATE('abc', 'MySQL') AS pos; -- 结果:0(未找到) -- 场景:筛选包含特定关键词的内容 SELECT * FROM article WHERE LOCATE('MySQL', tit


雷达卡


京公网安备 11010802022788号







