我有一个包含四个不同列的表格。它叫做盒子表。它包含不同盒子的特征。
以下是列的名称:序列号、箱子高度、箱子宽度、箱子重量。
第一列(序列号)是一个字符串,但它可以在一行中包含多个框,例如:(212,234)。如果一个字符串包含多个框,我想将该字符串拆分为不同的行(框的数量,由逗号数 + 1 决定)。当我这样做时,我希望其他列值也为新创建的行复制。例如
Serial Number: 1,2 | Box Height: 5 | Box Width: 2 | Box Weight: 100
改造后:
Row (1): Serial Number: 1 | Box Height: 5 | Box Width: 2 | Box Weight: 100
Row (2): Serial Number: 2 | Box Height: 5 | Box Width: 2 | Box Weight: 100
我什至不明白如何开始这个问题。我最多只能从字符串中删除特殊字符。
最佳答案
一个典型的解决方案是生成一个数字列表(通过创建表或使用内联查询),然后将其与源数据JOIN
,使用 MySQL 字符串函数提取相关部分序列号
。
这是一个使用内联查询的解决方案,每条记录最多可以处理 5 个连续出版物(要处理更多的连续出版物,您需要使用更多 UNION ALL
扩展子查询):
SELECT
SUBSTRING_INDEX(
SUBSTRING_INDEX(box.serial_number, ',', num.n),
',',
-1
) new_serial_number,
box.height,
box.width,
box.weight
FROM
(
SELECT 1 n
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
) num
INNER JOIN box
ON CHAR_LENGTH(box.serial_number)
- CHAR_LENGTH(REPLACE(box.serial_number, ',', ''))
>= num.n - 1
这个 demo on DB Fiddle 您的示例数据返回:
| new_serial_number | height | width | weight |
| ----------------- | ------ | ----- | ------ |
| 1 | 5 | 2 | 100 |
| 2 | 5 | 2 | 100 |
关于mysql - 如何使用 MYSQL 将字符串拆分为表中的多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57861598/