我的数据库中有一个包含以下数据的列(是的,我知道多个名称由一些随机字符分隔是错误的)
“约翰·库萨克 | 坦迪·牛顿 | 切瓦特尔·埃加福特”
我希望能够将这些人分成一个数组以供以后使用,甚至只是能够像下面这样显示它们会有所帮助
John Cusack
Thandie Newton
Chiwetel Ejiofor
任何想法请提前感谢
我的数据库中有一个包含以下数据的列(是的,我知道多个名称由一些随机字符分隔是错误的)
“约翰·库萨克 | 坦迪·牛顿 | 切瓦特尔·埃加福特”
我希望能够将这些人分成一个数组以供以后使用,甚至只是能够像下面这样显示它们会有所帮助
John Cusack
Thandie Newton
Chiwetel Ejiofor
任何想法请提前感谢
正如您所说,在 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()
列表的第一个和最后一个元素调用两次,但我认为这样做可以提供更多信息,以便更清楚地看到其他元素的模式。
如果您愿意,您可以构建一个存储过程,循环遍历字符串,使用每个找到的元素填充一个临时表——但这与“良好实践”相去甚远,几乎可以肯定不值得进一步深入研究。
你可以试试这个。
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 并稍作修改。
请记住:联合语句的“计数”必须与您的分隔符相同。
亲切的问候