Sql选择进入数组 - 列有分隔符

时间:2013-01-16 19:47:22

标签: mysql

我的数据库中有一个列有以下数据(是的,我知道将多个名称用一些随机字符分隔是错误的)

“John Cusack | Thandie Newton | Chiwetel Ejiofor”

我希望能够将这些人分成一个数组,以便以后使用,甚至只是为了能够像下面那样显示它们

John Cusack
Thandie Newton
Chiwetel Ejiofor

请提出任何想法 提前谢谢

2 个答案:

答案 0 :(得分:0)

正如您所说,在RDBMS 中存储分隔列表真的not a good idea;但是,您可以使用MySQL的字符串操作函数(如SUBSTRING_INDEX())来获得所需的结果(MySQL没有数组类型,因此我假设您只是想分割数据):

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(my_column, '|', 1), -1),
       SUBSTRING_INDEX(SUBSTRING_INDEX(my_column, '|', 2), -1),
       SUBSTRING_INDEX(SUBSTRING_INDEX(my_column, '|', 3), -1)
FROM   my_table

请注意,实际上并不需要为列表的第一个和最后一个元素调用SUBSTRING_INDEX()两次,但我认为这样做可以提供信息,以便更清楚地看到其他元素的模式

如果您如此倾向,那么可以构建一个存储过程,该存储过程循环遍历填充临时表的字符串以及每个找到的元素 - 但这远远不是“良好实践”,它是几乎肯定不值得深入研究它。

答案 1 :(得分:0)

你可以试试这个。

 select substring_index(substring_index('a|b|c|h', '|',@r:=@r+1),'|',-1) zxz
from (select @r:=0) x,
(select 'x' xx union select 'v' xx union select 'z' xx  union select 'p' xx) z;

结果看起来像

----
|zxz|
-----
|a   |
------
|b   |
------
|c   |
------
|h   |
------

在这里找到:Mysql 并稍加修改。

请记住:联合声明的“计数”必须与您的删除者相同。

Kind Regars