题解 | 提取博客URL中的用户名 INSTR()
提取博客URL中的用户名
https://www.nowcoder.com/practice/26c8715f32e24d918f15db69518f3ad8
SELECT device_id,
substring_index(blog_url, '/', -1) user_name
FROM user_submit;
INSTR() 是 SQL 中用于查找子串位置的函数。它的作用是返回一个字符串在另一个字符串中第一次出现的位置(索引)。
如果找到了,返回位置数字(从 1 开始);如果没找到,返回 0。
INSTR(主字符串, 子字符串, [起始位置], [第几次出现]) 查找子串位置
- 主字符串: 被搜索的长字符串(字段或常量)。
- 子字符串: 想要查找的短字符串。
- 起始位置 (可选): 从第几个字符开始找(默认是 1)。可以是负数(表示从右往左数)。
- 第几次出现 (可选): 想找第几次出现的子串(默认是 1,即第一次)。
返回值:
- 整数:子串第一次出现的位置(从 1 开始计数)。
- 0:如果没有找到子串。
结合 SUBSTR 提取数据 (最经典用法) 这是 INSTR 最强大的地方:动态截取字符串。
- 例子:提取邮箱 @ 符号后面的域名。假设邮箱是 'user@example.com'。
-- 1. 先找到 @ 的位置
SELECT INSTR('user@example.com', '@'); -- 结果: 5
-- 2. 利用这个位置 + 1 作为 SUBSTR 的起点
SELECT SUBSTR('user@example.com', INSTR('user@example.com', '@') + 1); -- 结果: 'example.com'
- MySQL 的
INSTR()只支持 2 个参数:INSTR(主串, 子串)。它永远只返回第一次出现的位置,无法指定找第几次。 - 次数为正数:从左往右数,截取到第 N 个分隔符为止。
- 次数为负数:从右往左数,截取最后 N 个部分。
使用 SUBSTRING_INDEX() (最推荐,MySQL 特有神器)
这是处理这种“分隔符截取”最简单的函数。它可以基于分隔符,从左边或右边截取指定次数。
语法:SUBSTRING_INDEX(字符串, 分隔符, 次数)
牛客网题目 文章被收录于专栏
做题心得,记录下来,供自己学习
查看1道真题和解析