mysql - 我有值 (abc,123,aed,ghi),我想在我的 sql 中分割各个值

标签 mysql sql

我有值(value)观 [abc,123,aed,ghi] 我想在 mysql 中单独分割值。 结果应该是这样的

column1 column2 column3 column4
  abc    123    aed      ghi

最佳答案

关系数据库和非原子数据的设计很糟糕😞。但你可以使用:

SELECT ID,
  MAX(CASE WHEN N = 1 THEN sub.val END) AS Column1,
  MAX(CASE WHEN N = 2 THEN sub.val END) AS Column2,
  MAX(CASE WHEN N = 3 THEN sub.val END) AS Column3,
  MAX(CASE WHEN N = 4 THEN sub.val END) AS Column4
FROM
(
  SELECT ID, SUBSTRING_INDEX(SUBSTRING_INDEX(t.HashTag, ',', n.n), ',', -1) AS val, N
  FROM (SELECT ID, Substring(my_csv_column, 2, LENGTH(my_csv_column) - 2) AS HashTag FROM my_non_normalized_table) AS t 
  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
   ,(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
  ) n
   WHERE n.n <= 1 + (LENGTH(t.HashTag) - LENGTH(REPLACE(t.HashTag, ',', '')))
) sub
GROUP BY ID;

SqlFiddleDemo

输出:

╔═════╦══════════╦══════════╦══════════╦═════════╗
║ ID  ║ Column1  ║ Column2  ║ Column3  ║ Column4 ║
╠═════╬══════════╬══════════╬══════════╬═════════╣
║  1  ║ abc      ║ 123      ║ aed      ║ ghi     ║
║  2  ║ efg      ║ cde      ║ (null)   ║ (null)  ║
╚═════╩══════════╩══════════╩══════════╩═════════╝

您应该阅读有关数据标准化和 1NF 的内容。

关于mysql - 我有值 (abc,123,aed,ghi),我想在我的 sql 中分割各个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34060182/

相关文章:

php - 存储过程中的准备语句不起作用

mysql - SQL SELECT 值为 5 的所有内容但不指定来自哪一列

php - 如何查找哪个文件具有将数据插入magento表中的代码

mysql - 理解MYSQL复合索引

java - 通过 Regex 表达式的 Hibernate 查询过滤器

java - 在托管bean中执行SQL语句

来自计数查询的 MySQL MAX

sql - 计算不同记录(所有列)不起作用

sql - HAVING 中的条件比 WHERE 中的相同条件更快?

Mysql存储过程出错