MySQL之如何将字符串分隔为列表结果集

1,062 阅读2分钟

「这是我参与2022首次更文挑战的第24天,活动详情查看:2022首次更文挑战

写在前面

今天在开发过程中遇到一个问题,那就是想要将一个有着固定分隔符的字符串,转换为多行的一个列表结果集,相信也有朋友遇到过,那下面就一起来看一下吧。

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中,我们是如何将一个多分隔符的字符串,转换成一个列表的结果集,不知道大家是否有所收获。