cwui 2024-06-13 17:22 采纳率: 27.8%
浏览 5
已结题

字符逗号分割,单行多多行

如下图 , 左边是原始数据,右边是想要的结果。
可以确定的是XMDD如果大于3位,一定可以用英文逗号分隔。

img

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-13 17:22
    关注

    引自免费微信小程序:皆我百晓生

    为了解决这个问题,我们可以使用SQL语句来处理。首先,我们假设原始数据存储在一个表中,表名为original_data,包含两列:VNAME(姓名)和XMDD(编码)。目标是将XMDD中的逗号分隔的值拆分为多行。以下是实现这一目标的SQL查询:

    -- 创建一个临时表来存储拆分后的结果
    CREATE TEMPORARY TABLE IF NOT EXISTS split_data AS
    SELECT VNAME,
           SUBSTRING_INDEX(SUBSTRING_INDEX(XMDD, ',', numbers.n), ',', -1) AS XMDD
    FROM original_data
    CROSS JOIN (
      SELECT a.N + b.N * 10 + 1 n
      FROM (
        SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
      ) a
      CROSS JOIN (
        SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
      ) b
      ORDER BY n
    ) numbers
    WHERE XMDD REGEXP ','
       OR XMDD RLIKE '^[^,]+$'
    ORDER BY VNAME, n;
    

    这个查询首先创建了一个数字序列(从1到100),然后通过CROSS JOIN与原始数据表连接,使用SUBSTRING_INDEX函数来拆分XMDD字段中的值。REGEXPRLIKE用于检查XMDD是否包含逗号或是否是一个非逗号分割的字符串。

    然而,上述SQL语句可能在某些数据库系统中不适用,因为它依赖于特定的SQL方言。对于MySQL,上述代码应该可以正常工作。对于其他数据库系统,例如PostgreSQL或SQL Server,你可能需要调整生成数字序列的方法以及字符串函数的使用。

    如果你的数据中XMDD字段总是包含逗号分隔的列表,你可以简化查询,去除正则表达式的部分:

    CREATE TEMPORARY TABLE IF NOT EXISTS split_data AS
    SELECT VNAME,
           SUBSTRING_INDEX(SUBSTRING_INDEX(XMDD, ',', numbers.n), ',', -1) AS XMDD
    FROM original_data
    CROSS JOIN (
      -- 数字序列生成,根据实际需要调整范围
      SELECT ROW_NUMBER() OVER () as n FROM (SELECT 1 UNION ALL SELECT 1 UNION ... UNION ALL SELECT 1) t(n)
    ) numbers
    WHERE XMDD LIKE '%,%'
    ORDER BY VNAME, n;
    

    在这个版本中,我们假设XMDD字段总是包含至少一个逗号。如果XMDD字段可能不包含逗号,且你希望保留这些记录,你需要在查询中添加额外的逻辑来处理这种情况。

    最后,确保在执行完查询后清理临时表,除非你打算保留它以供后续分析使用。这可以通过简单的DROP TABLE split_data;命令完成。

    请根据你的具体数据库环境和需求调整上述SQL语句。如果需要进一步的帮助,例如针对特定数据库系统的优化,或者在执行过程中遇到任何问题,请随时告知。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月16日
  • 创建了问题 6月13日

悬赏问题

  • ¥15 问题重发,R语言:代码运行过程中出现如下警告,请求如何解决!
  • ¥15 苍穹外卖拦截器token为null
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关
  • ¥15 C#中的编译平台的区别影响