首页 > 试题广场 >

提取博客URL中的用户名

[编程题]提取博客URL中的用户名
  • 热度指数:177982 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
题目:对于申请参与比赛的用户,blog_url字段中url字符后的字符串为用户个人博客的用户名,现在运营想要把用户的个人博客用户字段提取出单独记录为一个新的字段,请取出所需数据。

示例:user_submit
device_id
profile
blog_url
2138 180cm,75kg,27,male
http:/url/bisdgboy777
3214 165cm,45kg,26,female
http:/url/dkittycc
6543 178cm,65kg,25,male
http:/url/tigaer
4321 171 cm,55kg,23,female
http:/url/uhksd
2131 168cm,45kg,22,female
http:/url/sydney

根据示例,你的查询应返回以下结果:
device_id
user_name
2138 bisdgboy777
3214 dkittycc
6543 tigaer
4321 uhsksd
2131 sydney

示例1

输入

drop table if exists user_submit;
CREATE TABLE `user_submit` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`profile` varchar(100) NOT NULL,
`blog_url` varchar(100) NOT NULL
);
INSERT INTO user_submit VALUES(1,2138,'180cm,75kg,27,male','http:/url/bisdgboy777');
INSERT INTO user_submit VALUES(1,3214,'165cm,45kg,26,female','http:/url/dkittycc');
INSERT INTO user_submit VALUES(1,6543,'178cm,65kg,25,male','http:/url/tigaer');
INSERT INTO user_submit VALUES(1,4321,'171cm,55kg,23,female','http:/url/uhsksd');
INSERT INTO user_submit VALUES(1,2131,'168cm,45kg,22,female','http:/url/sysdney');

输出

2138|bisdgboy777
3214|dkittycc
6543|tigaer
4321|uhsksd
2131|sysdney
select
    device_id,
    # 提取最后一个/后的所有字符
    substring_index(blog_url,'/',-1)
        as user_name
from user_submit

发表于 2025-06-14 16:08:36 回复(0)

select device_id,substring_index(blog_url,'/',-1) as user_name from user_submit

发表于 2025-05-27 16:48:58 回复(0)
select device_id, substring_index(blog_url,'/',-1) as user_name
from user_submit

# 法2.replace法
select device_id, replace(blog_url,'http:/url/', '') as user_name
from user_submit

# 法3.substr 法
select device_id, substr(blog_url,11) as user_name
from user_submit

# 法4.trim法
select device_id, trim('http:/url/' from blog_url) as user_name
from user_submit
# 也可以这么写
select device_id, trim(both 'http:/url/' from blog_url) as user_name
from user_submit
发表于 2025-05-22 12:30:06 回复(0)
select device_id,
SUBSTRING_INDEX(blog_url, '/', -1) AS user_name
from user_submit

发表于 2025-04-16 15:58:46 回复(0)
正则表达式貌似也可以
select
    device_id,
    regexp_substr(blog_url, '[^/]+$') AS user_name
from
    user_submit;


发表于 2025-03-25 17:26:32 回复(0)
在 MySQL 里,SUBSTRING_INDEX 函数能够按照指定的分隔符,从字符串中提取子字符串。
SUBSTRING_INDEX(str, delimiter, count)
  • str:这是要进行操作的原始字符串。
  • delimiter:指的是用于分割字符串的分隔符,可以是单个字符,也能是字符串。
  • count:为一个整数,用来指定提取的方向和数量:
    • 若 count 为正数,会从字符串的左侧开始计数,提取分隔符出现 count 次之前的所有内容。
    • 若 count 为负数,会从字符串的右侧开始计数,提取分隔符出现 |count| 次之后的所有内容。
-- 示例 1:提取分隔符第一次出现之前的内容 SELECT SUBSTRING_INDEX('www.example.com', '.', 1); -- 输出:www -- 示例 2:提取分隔符第二次出现之前的内容 SELECT SUBSTRING_INDEX('www.example.com', '.', 2); -- 输出:www.example
-- 示例 3:提取分隔符最后一次出现之后的内容 SELECT SUBSTRING_INDEX('www.example.com', '.', -1); -- 输出:com -- 示例 4:提取分隔符倒数第二次出现之后的内容 SELECT SUBSTRING_INDEX('www.example.com', '.', -2); -- 输出:example.com


发表于 2025-03-25 09:36:03 回复(0)
url长度规整也可以尝试mid()函数
SELECT
    device_id,
    -- 从第 11 个字符开始截取到末尾
    MID(blog_url, 11) AS user_name
FROM
    user_submit;

发表于 2025-03-23 00:01:36 回复(0)
 为什么这题不要用group by
发表于 2025-03-19 11:07:22 回复(0)
SELECT
device_id,
substring_index (blog_url, '/', -1) user_name
FROM
user_submit;

SELECT
device_id,
replace (blog_url, 'http:/url/', '') user_name
FROM
user_submit;
发表于 2025-03-06 13:22:49 回复(0)
select
device_id,
substring_index(blog_url, '/', -1) as user_name
from
user_submit
发表于 2025-03-03 11:42:14 回复(0)
select
  device_id,
  # substring_index(blog_url, '/', -1)  -- Yes
  # replace(blog_url, 'http:/url/', '')  -- Yes
  trim(leading 'http:/url/' from blog_url)
from user_submit
发表于 2025-02-06 14:17:40 回复(0)
用了
SUBSTR,INSERT,right,TRIM,replace
5种函数
发表于 2025-01-13 15:37:10 回复(0)
select device_id,right(blog_url,length(blog_url)-10) user_name
from user_submit


发表于 2024-12-23 15:58:20 回复(0)
可以用substring(string,int start)来截取,但牛客表中的url有些写的不全,,,
select device_id, substring(blog_url,11) as user_name
from user_submit ;
#1,substring(profile,11)
#2,SUBSTRING_INDEX(blog_url,"/",-1)
发表于 2024-09-30 11:19:11 回复(0)
select
    device_id,
    substring_index(blog_url,'/',-1) as user_name
from user_submit
和上一道题目相同,依然是使用以标志划分的文本截取函数。思路是找到截取的共性
发表于 2024-08-09 21:15:32 回复(0)
select 
    device_id
    ,substr(blog_url,length('http:/ur/')+2) user_name
from user_submit s

发表于 2024-07-17 01:53:35 回复(0)
/*
select device_id,
       substring_index(blog_url,'/',-1) as user_name
from user_submit
*/
select device_id,
       replace(blog_url,'http:/url/','' ) 
from user_submit

发表于 2024-05-29 12:33:23 回复(0)
SELECT device_id, SUBSTRING_INDEX(blog_url, '/', -1) AS user_name
FROM user_submit
发表于 2024-05-06 23:51:38 回复(0)
SELECT device_id,REPLACE(blog_url,'http:/url/','') user_name
FROM
(
SELECT device_id,REPLACE(blog_url,'ur','url') blog_url
FROM(
SELECT device_id,REPLACE(blog_url,'url','ur') blog_url
FROM user_submit) A) B
发表于 2024-04-16 23:17:49 回复(0)
select 
-- 替换法 replace(string, '被替换部分','替换后的结果')
-- device_id, replace(blog_url,'http:/url/','') as user_name

-- 截取法 substr(string, start_point, length*可选参数*)
-- device_id, substr(blog_url,11,length(blog_url)-10) as user_nam

-- 删除法 trim('被删除字段' from 列名)
-- device_id, trim('http:/url/' from blog_url) as user_name

-- 字段切割法 substring_index(string, '切割标志', 位置数(负号:从后面开始))
device_id, substring_index(blog_url,'/',-1) as user_name

from user_submit;

发表于 2024-03-07 14:34:01 回复(0)