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 ?

MySQL字符串截取函数substring_index

使用mysql的SUBSTRING_INDEX函数解决项目中编码非重复问题的实现方案!

MySQL字符串截取之substring_index

mysql函数之SUBSTRING_INDEX(str,"/",-1)