0

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

“约翰·库萨克 | 坦迪·牛顿 | 切瓦特尔·埃加福特”

我希望能够将这些人分成一个数组以供以后使用,甚至只是能够像下面这样显示它们会有所帮助

John Cusack
Thandie Newton
Chiwetel Ejiofor

任何想法请提前感谢

4

2 回答 2

0

正如您所说,在 RDBMS 中存储分隔列表确实不是一个好主意;但是,您可以使用 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()列表的第一个和最后一个元素调用两次,但我认为这样做可以提供更多信息,以便更清楚地看到其他元素的模式。

如果您愿意,您可以构建一个存储过程,循环遍历字符串,使用每个找到的元素填充一个临时表——但这与“良好实践”相去甚远,几乎可以肯定不值得进一步深入研究。

于 2013-01-16T19:53:29.840 回答
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 并稍作修改。

请记住:联合语句的“计数”必须与您的分隔符相同。

亲切的问候

于 2013-01-16T20:22:07.373 回答