MySQL 字符串截取函数及用法详解
目录
- mysql 字符串截取函数详解
- RIGHT(str, length):从右侧截取指定长度的字符
- SUBSTRING(str, pos) 或 SUBSTRING(str, pos, len):从指定位置开始截取
- SUBSTRING_INDEX(str, delim, count):根据分隔符截取字符串
- 多字节字符处理
- 实际应用场景
- 场景 1:提取邮箱的域名
- 场景 2:解析 URL 中的路径
- 总结
MySQL 字符串截取函数详解
在 MySQL 中,字符串截取是常见的操作,主要用于从字符串中提取特定部分。MySQL 提供了多种函数来实现这一功能,包括 LEFT()、RIGHT()、SUBSTRING()、MID()、SUBSTR() 和 SUBSTRING_INDEX() 等。本文将详细介绍这些函数的用法,并通过示例进行说明。
LEFT(str, length):从左侧截取指定长度的字符
功能:从字符串 str 的左侧开始,截取 length 个字符。
语法:
LEFT(str, length)
示例:
SELECT LEFT('sqlstudy.com', 3);
结果:
+-------------------------+
| LEFT('sqlstudy.com', 3) |+-------------------------+| sql |+-------------------------+
解释:从 'sqlstudy.com' 的左侧开始,截取 3 个字符,结果为 'sql'。
RIGHT(str, length):从右侧截取指定长度的字符
功能:从字符串 str 的右侧开始,截取 length 个字符。
语法:
RIGHT(str, length)
示例:
SELECT RIGHT('sqlstudy.com', 3);
结果:
+--------------------------+
| RIGHT('sqlstudy.com', 3) |+--------------------------+| com |+--------------------------+
解释:从 'sqlstudy.com' 的右侧开始,截取 3 个字符,结果为 'com'。
SUBSTRING(str, pos) 或 SUBSTRING(str, pos, len):从指定位置开始截取
功能:从字符串 str 的第 pos 个字符开始,截取 len 个字符。pos 可以是正数或负数,正数表示从左侧开始,负数表示从右侧开始。
语法:
SUBSTRING(str, pos) SUBSTRING(str, pos, len)
示例:
-- 从第 4 个字符开始,直到结束
SELECT SUBSTRING('sqlstudy.com', 4);
-- 从第 4 个字符开始,截取 2 个字符
SELECT SUBSTRING('sqlstudy.com', 4, 2);
-- 从倒数第 4 个字符开始,直到结束
SELECT SUBSTRING('sqlstudy.com', -4);
-- 从倒数第 4 个字符开始,截取 2 个字符
SELECT SUBSTRING('sqlstudy.com', -4, 2);
结果:
+------------------------------+
| SUBSTRING('sqlstudy.com', 4) |+------------------------------+| study.com |+------------------------------++---------------------------------+
| SUBSTRING('sqlstudy.com', 4, 2) |+---------------------------------+| st |+---------------------------------++-------------------------------+
| SUBSTRING('sqlstudy.com', -4) |+-------------------------------+| .com |+-------------------------------++----------------------------------+
| SUBSTRING('shttp://www.devze.comqlstudy.com', -4, 2) |+-------------http://www.devze.com---------------------+| .c |+----------------------------------+
解释:
SUBSTRING('sqlstudy.com', 4):从第 4 个字符开始,直到字符串结束,结果为 android'study.com'。SUBSTRING('sqlstudy.com', 4, 2):从第 4 个字符开始,截取 2 个字符,结果为'st'。SUBSTRING('sqlstudy.com', -4):从倒数第 4 个字符开始,直到字符串结束,结果为'.com'。SUBSTRING('sqlstudy.com', -4, 2):从倒数第 4 个字符开始,截取 2 个字符,结果为'.c'。
注意:
len 必须为非负整数。若省略 len,则默认截取到字符串末尾。
若 pos 超出字符串长度或为 0,返回空字符串。例如:
SELECT SUBSTRING('abc', 0, 1); -- 结果:空字符串
SELECT SUBSTRING('abc', 5, 1); -- 结果:空字符串
SUBSTRING_INDEX(str, delim, count):根据分隔符截取字符串
功能:根据分隔符 delim,从字符串 str 中截取出第 count 次出现的分隔符前或后的子字符串。count 为正数时,从左侧开始计数;为负数时,从右侧开始计数。
语法:
SUBSTRING_INDEX(str, delim, count)
示例:
-- 截取第二个 '.' 之前的所有字符
SELECT SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', 2);
-- 截取倒数第二个 '.' 之后的所有字符
SELECT SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', -2);
-- 如果分隔符不存在,返回整个字符串
SELECT SUBSTRING_INDEX('www.sqlstudy.com.cn', '.coc', 1);
结果:
+------------------------------------------------+
| SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', 2) |+------------------------------------------------+| www.sqlstudy |+------------------------------------------------++-------------------------------------------------+
| SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', -2) |+-------------------------------------------------+| com.cn |+-------------------------------------------------++---------------------------------------------------+
| SUBSTRING_INDEX('www.sqlstudy.com.cn', '.coc', 1) |+---------------------------------------------------+| www.sqlstudy.com.cn |+---------------------------------------------------+
解释:
SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', 2):返回第 2 次出现的.之前的所有字符,结果为'www.sqlstudy'。SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', -2):返回倒数第 2 次出现的.之后的所有字符,结果为'com.cn'。SUBSTRING_INDEX('www.sqlstudy.com.cn', '.coc', 1):由于.coc不存在于字符串中,返回整个字符串'www.sqlstudy.com.cn'。
注意:
若 count编程 超过分隔符实际出现的次数,返回整个字符串。例如:
SELECT SUBSTRING_INDEX('a.b.c.d', '.', 5); -- 结果:'a.b.c.d'
MID(str, pos, len) 或 SUBSTR(str, pos, len):与 SUBSTRING 等价
功能:与 SUBSTRING 函数功能相同,用于从指定位置开始截取指定长度的子字符串。
语法:
MID(str, pos, len) SUBSTR(str, pos, len)
示例:
-- 从第 4 个字符开始,截取 2 个字符
SELECT MID('sqlstudy.com', 4, 2);
-- 从倒数第 4 个字符开始,截取 2 个字符
SELECT SUBSTR('sqlstudy.com', -4, 2);
结果:
+----------------------------------+
| MID('sqlstudy.com', 4, 2) |+----------------------------------+| st |+----------------------------------++-----------------------------------+
| SUBSTR('sqlstudy.com', -4, 2) |+-----------------------------------+| .c |+-----------------------------------+
解释:
MID('sqlstudy.com', 4, 2)与SUBSTRING('sqlstudy.com', 4, 2)结果相同,均为'st'。SUBSTR('sqlstudy.com', -4, 2)与SUBSTRING('sqlstudy.com', -4, 2)结果相同,均为'.c'。
多字节字符处理
MySQL 的字符串截取函数默认按字符(而非字节)处理,适用于多字节字符集(如 UTF-8)。例如:
SELECT LEFT('中文测试', 2); -- 结果:'中文'
SELECT SUBSTRING('数据库', 2, 2); -- 结果:'据库'
实际应用场景
场景 php1:提取邮箱的域名
SELECT email, SUBSTRING_INDEX(email, '@', -1) AS domain FROM users;
结果:
+-------------------+-------------+
| email | domain |+-------------------+-------------+| user@example.com | example.com |+-------------------+-------------+
场景 2:解析 URL 中的路径
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(url, '//', -1), '/', 1) AS host FROM website;
输入:'https://www.sqlstudy.com/path'
'www.sqlstudy.com'
总结
| 函数 | 功能概要 | 核心区别 |
|---|---|---|
LEFT() / RIGHT() | 从左右侧截取固定长度 | 方向固定,长度明确 |
SUBSTRING() | 灵活指定起始位置和长度 | 支持正负位置,功能最全面 |
SUBSTRING_INDEX() | 基于分隔符截取 | 适合处理结构化字符串(如路径) |
MID() / SUBSTR() | 与 SUBSTRING 功能相同 | 语法别名,可互换使用 |
掌握这些函数,可以高效处理字符串截取需求,提升数据处理的灵活性。
加载中,请稍侯......
精彩评论