首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将逗号分隔的单独列转换为唯一列

问将逗号分隔的单独列转换为唯一列
EN

Stack Overflow用户
提问于 2013-06-23 18:59:53
回答 2查看 987关注 0票数 0

我有一张桌子

代码语言:javascript
复制
 ID      name
 1       john, peter, ken

如何使用MYSQL将名称列(值以逗号分隔)分隔为单独的列?

代码语言:javascript
复制
ID       name
1        john
1        peter
1        ken 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-23 20:15:15

您可以使用如下查询:

代码语言:javascript
复制
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个名称)。

Fiddle是here。

说明

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

代码语言:javascript
复制
SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3

然后我用mytable加入这个数字,使用这个加入条件:

代码语言:javascript
复制
ON LENGTH(REPLACE(name, ',' , '')) <= LENGTH(name)-n.digit

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

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

代码语言:javascript
复制
SUBSTRING_INDEX(name, ',', n.digit+1)

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

代码语言:javascript
复制
SUBSTRING_INDEX(SUBSTRING_INDEX(name, ',', n.digit+1), ',', -1)
票数 2
EN

Stack Overflow用户

发布于 2013-06-23 19:19:02

如果你需要把数据放到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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17260075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档