首页 > 解决方案 > How to split string with square brackets and commas to columns and rows in mysql

问题描述

I want to split strings like: [[6, 10, 11, 16], [0.4444444444444445, 53.0, 7.555555555555555, 5.111111111111111]]

to output

id       value
---------------------------
6        0.4444444444444445
10       53.0
11       7.555555555555555
16       5.111111111111111

Number of 'ids' in the string varies but there is always value for an 'id'.

标签: mysqlsplit

解决方案


这可以使用存储过程来分割字符串,创建(临时)表,将结果存储在所述表中并使用SELECT语句返回表内容。

然而,这不太可能是一种有效的方法- 编写会很耗时,并且执行时间也不会很好,如果您向其传递大量数据或重复调用,则会产生瓶颈。

一种更简单的方法——也是我将遵循的路线——是用你最喜欢的编程语言来做这件事,然后将结果存储在数据库中。或者,您的代码的输出可以是一个查询,UNION该查询将返回所需的数据结构。本质上,任务是转置一个二维数组并构造输出。如果它不是太大,这将是快速和高效的,如果您需要将它与其他数据结合起来,它可以用作子查询。

为了给你和想法,输出可能如下:

SELECT 6 AS id, 0.4444444444444445 AS value
UNION ALL SELECT 10, 53.0
UNION ALL SELECT 11,7.555555555555555
UNION ALL SELECT 16, 5.111111111111111

投入实际使用:

SELECT 
   sub.id,
   sub.value,
   info.someFieldFromAnotherTable
FROM
   (SELECT 6 AS id, 0.4444444444444445 AS value
    UNION ALL SELECT 10, 53.0
    UNION ALL SELECT 11,7.555555555555555
    UNION ALL SELECT 16, 5.111111111111111
   ) AS sub
   INNER JOIN otherInfoTable info ON info.id = sub.id

推荐阅读