【问题标题】:Split comma separated values in MySQL在 MySQL 中拆分逗号分隔值
【发布时间】:2018-12-25 04:24:23
【问题描述】:

我正在尝试将逗号分隔 (,) 值从一个字符串拆分为多个列

样本数据:

     COL1                 COL2            COL3
000002,000003,000042   09,31,51      007,004,007

预期输出:

Pno       Cno  Sno
000002    09   007
000003    31   004
000042    51   007

我尝试了以下查询:

SELECT   SUBSTRING_INDEX(COL1, ',', 1) Pno
                 ,SUBSTRING_INDEX(COL2, ',', 1) Cno
                 ,SUBSTRING_INDEX(COL3, ',', 1) Sno
            FROM MyTargetTable

结果:

Pno        Cno  Sno
000002     09   007

我可能在每列中得到超过 3 行,我想知道是否有任何方法可以在不指定子字符串位置的情况下实现这一点。

可能的输入数据也可能是这样的

     COL1                        COL2             COL3
000002,000003,000042,,000002   09,31,51,,32      007,004,007,,012

【问题讨论】:

  • 简单修复:没有分隔值。规范化你的架构!
  • @strawberry 赞赏作为最佳实践,这些值将从集成软件进入临时表
  • 好吧,您可能在一列中有重复的值这一事实使这非常棘手。
  • @Strawberry 如果所有 3 列都有重复值,我们可以使用 distinct from select 查询

标签: mysql string substring


【解决方案1】:

这是一个想法。它假设您有一个整数表(整数),其值 (i) 0-9...

SELECT DISTINCT
       SUBSTRING_INDEX(SUBSTRING_INDEX(col1,',',i+1),',',-1)x
     , SUBSTRING_INDEX(SUBSTRING_INDEX(col2,',',i+1),',',-1)y
     , SUBSTRING_INDEX(SUBSTRING_INDEX(col3,',',i+1),',',-1)z
  FROM my_table
     , ints
 ORDER 
    BY i;

【讨论】:

  • 它返回的值与我在问题中提到的方法相同,需要在每列中获取多个值
  • 这对我来说很好用。而且您绝对不需要“在每列中获取多个值”
  • 我认为这是由于某些字段中的 varchar 值
  • 这绝对适用于只有 int 值和引用 int 表,我想找到一个在字符串中使用 varchar 值的解决方案。
  • 没什么区别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多