mysql - 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'.
解决方案
这可以使用存储过程来分割字符串,创建(临时)表,将结果存储在所述表中并使用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
推荐阅读
- android - 使用 Firebase 的 Google Sigin 无法在内部测试轨道中运行
- node.js - 如何修复 gulp-sass 安装错误
- delphi - TDateEdit 无法与数据源双向进行 LiveBinding
- javascript - 版本更新后 Cypress 文本执行错误
- amazon-web-services - 如何修复更新服务失败:容器 XXX 没有定义容器端口 80
- html - 如何在 div 中垂直和水平居中文本,同时围绕大小可以变化的图像流动
- macos - 我在mac终端上无法清除一个句子
- javascript - 使用反应原生日期时间选择器两次会出错?
- c++ - 特定的直角三角形在 Cpp 中未被识别为直角
- d3.js - d3.js v4 向下钻取选项 - 如何创建默认/重置值