SQL-文本函数-学习笔记(2)

现有表user_submit如下:

题目:对于申请参与比赛的用户,blog_url字段中url字符后的字符串为用户个人博客的用户名,现在运营想要把用户的个人博客用户字段提取出单独记录为一个新的字段,请取出所需数据。

解题思路与步骤:
0.在例子中,用户名一直在列(blog_url)的最后,简单点的方法是直接substring_index(blog_url,'/',-1),但是考虑到现实中更多情况下,我们需要在strlist当中截取我们想要的字段。例如在'http:/ur/tigaer/home'中提取'tigaer'。由题可知,用户名一定在'url/'与下一个'/'之间。

1.先用replace()函数,将blog_url列中的'/'换成',',再用find_in_set()函数找到url的位置,最后将前步返回的索引加1得到用户名的索引;

SELECT device_id,blog_url,
REPLACE(blog_url,'/',',') blog_strlist,
(FIND_IN_SET('url',REPLACE(blog_url,'/',','))+1) blog_name_index
from user_submit

2.先用一次 substring_index()函数,截取一段字符strlist1并确保用户名在strlist1的最后一个位置;

SELECT *,SUBSTRING_INDEX(blog_url,'/',blog_name_index) fetch_str
from
(SELECT device_id,blog_url,
REPLACE(blog_url,'/',',') blog_strlist,(FIND_IN_SET('url',REPLACE(blog_url,'/',','))+1) blog_name_index
from user_submit) tab1

3.再用一次 substring_index()函数,选取最末尾的用户名(此时已经可以确定,fetch_str字段的最后一个词为用户名!);

SELECT device_id,SUBSTRING_INDEX(fetch_str,'/',-1) user_name
from
(SELECT *,SUBSTRING_INDEX(blog_url,'/',blog_name_index) fetch_str
from
(SELECT device_id,blog_url,
REPLACE(blog_url,'/',',') blog_strlist,(FIND_IN_SET('url',REPLACE(blog_url,'/',','))+1) blog_name_index
from user_submit) tab1) tab2

 知识点总结:

1.replace(col,a,b)函数,用b替换col列中每个字段里的a;

2.substring_index(col,a,b)函数,col为一个字符串类的数据,a是分隔符,b是想找的位置(或者说指针),当b为正数时,返回从头到第b个(从头开始向尾数)str组成的strlist;当b为负数时,返回从尾到第-b个(从尾开始向头数)str组成的strlist。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值