题解 | 提取博客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(主串, 子串)。它永远只返回第一次出现的位置,无法指定找第几次。
  • 使用 SUBSTRING_INDEX() (最推荐,MySQL 特有神器)

    这是处理这种“分隔符截取”最简单的函数。它可以基于分隔符,从左边或右边截取指定次数。

    语法SUBSTRING_INDEX(字符串, 分隔符, 次数)

  • 次数为正数:从左往右数,截取到第 N 个分隔符为止。
  • 次数为负数:从右往左数,截取最后 N 个部分。
牛客网题目 文章被收录于专栏

做题心得,记录下来,供自己学习

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务