如何使用MYSQL将字符串拆分为表中的多行?

问题描述 投票:0回答:2

我有一个有四个不同列的表格。它的名字叫“盒子表”。它包含不同盒子的特征。

以下是各列的名称:序列号、盒子高度、盒子宽度、盒子重量。

第一列(序列号)是一个字符串,但它可以在一行中包含多个框,例如:(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 

我不明白如何开始这个问题。我最多能做的就是从字符串中删除特殊字符。

mysql sql
2个回答
1
投票

一个典型的解决方案是生成一个数字列表(通过创建表或使用内联查询),然后使用源数据

JOIN
,使用MySQL字符串函数提取
serial_number
的相关部分。

这是一个使用内联查询的解决方案,每个记录最多可以处理 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

这个 DB Fiddle 上的演示以及您的示例数据返回:

| new_serial_number | height | width | weight |
| ----------------- | ------ | ----- | ------ |
| 1                 | 5      | 2     | 100    |
| 2                 | 5      | 2     | 100    |

0
投票

请帮忙。如果你查看这个 GOOGLE DRIVE。他们的里面有一个PDF。我的问题很简单。如何修改一行?因为其中一些有 4 种不同的物品。这是一份杂货清单。我正在尝试将其修改为每行一项。那么我怎样才能在 MySQL 中做到这一点呢? PDF 第 2 页显示。我要去做什么。  https://drive.google.com/file/d/1HvmmAQTsA_KXnKR4PL3q3oN2gJFFlN84/view?usp=sharing

只是一个提醒。我正在使用MySQL。 我不明白如何开始这个问题。 但我确实认为它是一个字符串。必须将其分成不同的行。

© www.soinside.com 2019 - 2024. All rights reserved.