Mysql 字符串截取函数 SUBSTRING 的用法
目录
从左开始截取 - LEFT
LEFT(str, length)
说明:被截取字段,截取长度
例:
select LEFT(content, 200) as abstract from my_content_t;
从右开始截取 - RIGHT
RIGHT(str, length)
说明:被截取字段,截取长度
例:
select RIGHT(content, 200) as abstract from my_content_t;
按位置截取 - SUBSTRING
SUBSTRING(str, pos)
SUBSTRING(str, pos, length)
说明:
- 第一种格式从字符串 str 返回一个子字符串,起始于位置 pos
- 第二种格式返回长度同 len 字符相同的子字符串,起始于位置 pos
- pos 可以是负值,表示从字符串末尾倒数
例:
-- 从第 5 个字符开始截取到末尾
select substring(content, 5) as abstract from my_content_t;
-- 从第 5 个字符开始截取 200 个字符
select substring(content, 5, 200) as abstract from my_content_t;
-- 从末尾倒数第 5 个字符开始截取到末尾
select substring(content, -5) as abstract from my_content_t;
注意:length 参数不能取负值。
按关键字截取 - SUBSTRING_INDEX
SUBSTRING_INDEX(str, delim, count)
说明:被截取字段,关键字,关键字出现的次数(可以是负数表示从右侧倒数)
例:
-- 截取第 2 个 '.' 之前的所有字符
select SUBSTRING_INDEX("blog.jb51.net", ".", 2) as abstract;
-- 结果:blog.jb51
-- 截取第 2 个 '.'(倒数)之后的所有字符
select SUBSTRING_INDEX("blog.jb51.net", ".", -2) as abstract;
-- 结果:jb51.net
-- 如果找不到关键字,返回整个字符串
select SUBSTRING_INDEX("blog.jb51.net", ".abc", 1) as abstract;
-- 结果:blog.jb51.net
实际应用
当存储的数据格式中包含多个分隔符分隔的 ID,需要用 SUBSTRING_INDEX 配合 SUBSTRING 分别提取每个 ID。例如在 IN 查询中分别获取两个 ID 值 1 和 2:
SELECT jl.*
FROM jl
WHERE jl.id = (
SELECT SUBSTRING((
SELECT user.jlid FROM user WHERE user.id = 1
), 1, 1)
)
OR jl.id = (
SELECT SUBSTRING((
SELECT user.jlid FROM user WHERE user.id = 1
), 3, 1)
)
LIMIT 0, 30;