【问题标题】:how to get the data using comma separator from mysql如何使用逗号分隔符从 mysql 获取数据
【发布时间】:2014-06-25 08:33:31
【问题描述】:

我有一个表,在这个表中,每行包含一些列,每列包含逗号分隔的值,例如:

 column1   |  column2            | column3
 ------------------------------------------
 1,2,3,4,5 | abc,xyz,pqr,std,bca |  etc.

现在我需要将每一行转换为 5 行,例如:

1st row like col1 1 col2 abc col3 ........
2nd row like col1 2 col2 xyz col3.........
3st row like col1 3 col2 pqr col3 ........
4nd row like col1 4 col2 std col3.........
5st row like col1 5 col2 bca col3 ........

我怎样才能做到这一点?

【问题讨论】:

  • 你想要的输出不是很清楚
  • 请告诉我你不清楚的地方
  • 您可以使用sensefulsolutions.com/2010/10/format-text-as-table.html 来创建数据的可视化表示。这会清除一些东西
  • 哇,随便伤害那些把你弄得一团糟的人吧。
  • 不过,我们喜欢挑战 :-) 但我认为最好在应用程序代码中解决这个问题。

标签: mysql sql database


【解决方案1】:

这是可能的,但很混乱。

SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(column1, ',', units.i + tens.i * 10), ',', -1) AS col1,
        SUBSTRING_INDEX(SUBSTRING_INDEX(column2, ',', units.i + tens.i * 10), ',', -1) AS col2,
        SUBSTRING_INDEX(SUBSTRING_INDEX(column3, ',', units.i + tens.i * 10), ',', -1) AS col3,
        SUBSTRING_INDEX(SUBSTRING_INDEX(column4, ',', units.i + tens.i * 10), ',', -1) AS col4
FROM sometable
CROSS JOIN (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9)units
CROSS JOIN (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9)tens

假设一行的所有列包含相同数量的逗号分隔字段,这将处理多达 100 个逗号分隔字段。

我正在使用 DISTINCT 来消除重复项(通过 substring_index 的工作方式,如果逗号分隔的值少于 100 个,则最后一个将重复直到有 100 个),但您可能希望原始表的唯一键选择以及避免合法的重复。另一种方法是计算一行字段中逗号分隔值的数量,并添加 where 子句以根据该计数检查生成的数字。

在实时代码中执行此操作可能是一个非常糟糕的主意,但如果您要将现有表转换为新格式以供将来使用,这可能是值得的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 2015-06-05
    • 2010-10-22
    • 2017-07-22
    相关资源
    最近更新 更多