单独用逗号分隔列到唯一列

时间:2013-06-23 10:59:53

标签: mysql csv

我有一张桌子:

 ID      name
 1       john, peter, ken

如何使用MYSQL将name列(使用逗号分隔的值分隔)分隔到单独的列中?

ID       name
1        john
1        peter
1        ken 

2 个答案:

答案 0 :(得分:2)

你可以使用这样的查询:

SELECT
  id,
  n.digit,
  name,
  SUBSTRING_INDEX(SUBSTRING_INDEX(name, ',', n.digit+1), ',', -1)
FROM
  mytable
  INNER JOIN
  (SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) n
  ON LENGTH(REPLACE(name, ',' , '')) <= LENGTH(name)-n.digit

(请注意,这最多只能分隔4个名字)。

小提琴是here

<强>解释

我正在使用一个返回0到3之间所有数字的查询(例如,您可以使用带有10或100个数字的索引表):

SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3

然后我使用此加入条件将此号码加入mytable

ON LENGTH(REPLACE(name, ',' , '')) <= LENGTH(name)-n.digit

这是检查名称列是否至少包含n.digit名称的“脏”方法(我正在删除所有逗号,我正在检查长度与完整字符串的差异)。

使用SUBSTRING_INDEX,您可以获得n.digit+1逗号左侧字符串的一部分:

SUBSTRING_INDEX(name, ',', n.digit+1)

再使用一个带负参数的SUBSTRING_INDEX,你只能将字符串的一部分保留到第一个逗号:

SUBSTRING_INDEX(SUBSTRING_INDEX(name, ',', n.digit+1), ',', -1)

答案 1 :(得分:0)

如果你需要将数据导入mysql,那么你可以使用explode创建一个php文件来为每个id创建一个数组。

这些可能有所帮助:

How can I split a comma delimited string into an array in PHP?

http://php.net/manual/en/function.explode.php