mysql - 如何在MySQL中分割逗号分隔的记录字符串并按顺序排列?

标签 mysql select

我想要一个 MySQL 查询来分别从下表中选择记录

   ID  AgentID    Name   Return Date
   1   1,2,3       A     2016-05-22,2016-02-1,2016-1-15
   2   2,4         B     2016-03-22,2016-04-1

期待答案

ID  AgentID    Name   Return Date
1    1          A     2016-05-22
1    2          A     2016-02-1
1    3          A     2016-1-15
2    2          B     2016-03-22
2    4          B     2016-04-1

最佳答案

您可以使用 MySQL SUBSTRING_INDEX()。它将返回给定逗号分隔字符串中指定的分隔符出现次数之前的子字符串。

试试这个,看起来效果很好:

SELECT ID
       ,SUBSTRING_INDEX(SUBSTRING_INDEX(t.AgentID, ',', n.n), ',', -1) Agent
       ,Name
       ,SUBSTRING_INDEX(SUBSTRING_INDEX(t.Return_Date, ',', n.n), ',', -1) Return_Date
FROM table1 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
   ORDER BY n
  ) n

WHERE n.n <= 1 + (LENGTH(t.Return_Date) - LENGTH(REPLACE(t.Return_Date, ',', '')))
ORDER BY ID;

检查这个.. SQL Fiddle HERE

要进一步学习,请继续MySQL Split String Function

关于mysql - 如何在MySQL中分割逗号分隔的记录字符串并按顺序排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38500338/

相关文章:

java - 选择标记未在 Jsp 上呈现

mysql - 计算MySQL中组记录的总和

php - 对 db 中的值进行排序和计数

java - 根据数据库查询返回的字符串,为 JTable 列中的所有单元格设置不同的背景颜色

java - JAVA 中的 MySQL 数据库查询

java - 在java中打印格式化字符串/字符数组

mysql - 在 SELECT 表中的其他位置使用子查询的别名

MySQL:对char(n)类型的列条目的每个字符进行约束

c# 如何在 SQL 查询中为 From 子句使用 Combobox.Value

mysql - 在 MySQL 中如何从具有相似值的行中选择所有 id