写在前面
今天在开发过程中遇到一个问题,那就是想要将一个有着固定分隔符的字符串,转换为多行的一个列表结果集,相信也有朋友遇到过,那下面就一起来看一下吧。
MySQL之如何将字符串分隔为列表结果集
要想将一个带有分隔符的字符串,转换成一个列表结果集。
在Oracle中我们通常使用level connect by关键字,但是这些关键字,在MySQL中可没有。
虽然没有这个关键字,但是思路是差不多的,也是要通过循环来解决这个问题。
咱们一步步的来,首先要做的就是mysql如何进行分割字符串。
今天要学习的第一个函数,substring_index,通过这个函数来获取到第几个分割符后的值。
一般要传入三个参数,分别是原字符串,分隔符,第几个分隔符。
通过这个三个参数,可以获取到相应的值。
我们得到了这个值后,就可以考虑如何循环得到所有的分隔符后的值了。
在mysql中,我们可以通过循环一个连续的数值,比如说一个id值。
通常我们使用help_topic表,这个是mysql中内置的一个表,通过这个表,我们可以编写出如下的一个SQL:
select substring_index('123,234,345', ',', help_topic_id + 1) from mysql.help_topic where help_topic_id < (length('123,234,345') - length(REPLACE('123,234,345', ',', '') ) + 1 )
通过这个SQL,我们可以得到一个结果,如下所示:
123
234
345
大家也可以自行去试一下,当然如果要连表查询其他表的话,也可以通过join、left join连表来查询结果。
如果通过连表查询的话,判断条件help_topic_id < (length('123,234,345') - length(REPLACE('123,234,345', ',', '') ) + 1 )
就可以写在ON关键字后面即可。
总结
今天学习了在MySQL中,我们是如何将一个多分隔符的字符串,转换成一个列表的结果集,不知道大家是否有所收获。