【发布时间】:2014-02-07 21:56:49
【问题描述】:
我正在尝试将我的 MySQL 数据库上的表中的数据分成一个。
列包含如下数据:
de:"Sweatjacke*";en:"jacket*";pl:"bluza*";
de:"*";en:"*";pl:"bluza*";
fr:"*";de:"*";en:"*";pl:"dres junior*";cz:"*";
pl:"bluza";
我正在尝试将所有翻译分成单独的列。已经提供了解决方案来做到这一点:
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(name, ';', 1), ';', -1) as tr1,
SUBSTRING_INDEX(SUBSTRING_INDEX(name, ';', 2), ';', -1) as tr2,
SUBSTRING_INDEX(SUBSTRING_INDEX(name, ';', 3), ';', -1) as tr3,
SUBSTRING_INDEX(SUBSTRING_INDEX(name, ';', 4), ';', -1) as tr4,
SUBSTRING_INDEX(SUBSTRING_INDEX(name, ';', 5), ';', -1) as tr5
FROM product;
声明,但结果是:
tr1 tr2 tr3 tr4 tr5
fr:"*" de:"*" en:"*" pl:"bluza*" cz:"*"
fr:"*" de:"Sweatjacke*" en:"jacket*" pl:"bluza*" cz:"*"
de:"Sweatjacke*" en:"jacket*" pl:"bluza*"
我想让结果按翻译类型 (pl/de/en) 进行分类,因此在每个列中都存在一种类型的翻译。例如在 column1 = pl:, column2 = en: 等
有没有人遇到过类似的问题并且知道解决方法?
【问题讨论】:
-
这样做的困难是为什么你不应该使用这种桌子设计。您需要了解数据库规范化。
-
告诉那个创造这个桌子设计的人 ;-) 我是那个试图修复它的人。
-
我认为,如果您在 Internet 上搜索,您可以找到一些使用 regexp 进行子字符串提取的 UDF。使用普通的 MySQL 函数没有简单的方法。
-
SELECT SUBSTRING_INDEX(SUBSTRING(name, LOCATE("pl:", name), 150), ';', 1) AS pl, SUBSTRING_INDEX(SUBSTRING(name, LOCATE("en:", name ) , 150 ) , ';', 1 ) AS en, SUBSTRING_INDEX( SUBSTRING( name, LOCATE( "de:", name ) , 150 ) , ';', 1 ) AS de, SUBSTRING_INDEX( SUBSTRING( name, LOCATE ( "fr:", name ) , 150 ) , ';', 1 ) AS fr FROM product 完成了这项工作 ;-) 谢谢!
标签: mysql sql database substring