MySQL利用SUBSTRING_INDEX()+ REPLACE()+mysql.help_topic实现字符串的分割(SQL实现一行数据转化为一列数据)
Posted L烧鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL利用SUBSTRING_INDEX()+ REPLACE()+mysql.help_topic实现字符串的分割(SQL实现一行数据转化为一列数据)相关的知识,希望对你有一定的参考价值。
1、前提
试卷表有个字段,保存的是题目表的题目集合
2、查询
现在需要将前端传入的题目集合,进行题目表的查询
3、 MyBatis编写
<!--根据题目集合获取题目列表-->
<select id="getTopicListByTopicSet" parameterType="string" resultType="Topic">
select
<include refid="TopicColumns"></include>
from jy_topic a
where a.id in (
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(#topicSet, ',', help_topic_id + 1), ',', -1) AS num
FROM mysql.help_topic
WHERE help_topic_id <![CDATA[<]]> LENGTH(#topicSet) - LENGTH(REPLACE(#topicSet, ',', '')) + 1
);
</select>
4、 SQL讲解
select SUBSTRING_INDEX(SUBSTRING_INDEX('02,08,09,10,11,12,13,14,15,16,17', ',', help_topic_id + 1), ',', -1) 截取目标字符,
SUBSTRING_INDEX('02,08,09,10,11,12,13,14,15,16,17', ',', help_topic_id + 1) 截取区域,
LENGTH('02,08,09,10,11,12,13,14,15,16,17') 字符串长度,
LENGTH(REPLACE('02,08,09,10,11,12,13,14,15,16,17', ',', '')) 除去分隔符后的字符串长度,
help_topic_id + 1 help_topic是MySQL下的一个表
from mysql.help_topic
WHERE help_topic_id < LENGTH('02,08,09,10,11,12,13,14,15,16,17') - LENGTH(REPLACE('02,08,09,10,11,12,13,14,15,16,17', ',', '')) + 1;
以上是关于MySQL利用SUBSTRING_INDEX()+ REPLACE()+mysql.help_topic实现字符串的分割(SQL实现一行数据转化为一列数据)的主要内容,如果未能解决你的问题,请参考以下文章
MySQL利用SUBSTRING_INDEX()+ REPLACE()+mysql.help_topic实现字符串的分割(SQL实现一行数据转化为一列数据)
PHP:相当于 MySQL 的函数 SUBSTRING_INDEX ?