2020-8-14 mysql进阶 行转列问题

一、字符串切割&&行转列

1.与表关联

举例:表a
在这里插入图片描述

select distinct 
substring_index(substring_index(a.q,';',b.help_topic_id+1),';',-1) ss
from  a  join  mysql.help_topic b
on b.help_topic_id < (length(a.q) - length(replace(a.q,';',''))+1)

结果:
在这里插入图片描述

2.切割字符

SELECT 
SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS num 
FROM 
mysql.help_topic 
WHERE 
help_topic_id < LENGTH('7654,7698,7782,7788')-LENGTH(REPLACE('7654,7698,7782,7788',',',''))+1

在这里插入图片描述

3.解释:

1.字符串分隔函数:SUBSTRING_INDEX(str, delim, count)
str     需要拆分的字符串
delim    分隔符,通过某字符进行拆分
count    当 count 为正数,取第 n 个分隔符之前的所有字符; 当 count 为负数,取倒数第 n 个分隔符之后的所有字符。
举例: 取第2个分隔符之前的所有字符
在这里插入图片描述

2.替换函数replace( str, from_str, to_str)
参数名   解释
str      需要进行替换的字符串
from_str   需要被替换的字符串
to_str     替换后的字符串

举例:
在这里插入图片描述

3.help_topic:一般为系统表,轻易不要修改,那么可以自己新建一个表,help_index,里面就一个字段help_index_id,只要保证这个表里面有较多数据,就可以了.

4.sql解析

-- where条件的含义是求出有多少列
help_topic_id < LENGTH('7654,7698,7782,7788')-
LENGTH(REPLACE('7654,7698,7782,7788',',',''))+1
-- 条件 
SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1)
-- 当 help_topic_id = 0时,获取到的字符串 = 7654 
-- 当 help_topic_id = 1时,获取到的字符串 = 7654,7698
-- 如下图: 两次循环自然就去掉了所有字符

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值