将列分成两列(sql)

时间:2012-07-06 20:31:40

标签: php sql

我的专栏包含以下信息:

Author  varchar(255)    utf8_general_ci
在我之前设计网站的程序员使用此专栏来存储两件事! 首先,作者的英文名称,然后他/她的名字用阿拉伯语! 所以,该列中的所有数据都具有相同的结构:تووياما أيما (Tooyama Ema) 括号之间是英文名称。括号外的阿拉伯语名称。 有没有办法取英文名称并将其放入新专栏。加上删除括号?我可以使用PHP和SQL,所以请你给我一个这两种语言的解决方案吗? 我希望结果看起来像这样:

  

作者:تووياما أيما   作者用英语:Tooyama Ema

我说的是很多具有相同结构的行。我想改变数据库中的结构。

2 个答案:

答案 0 :(得分:3)

$str = "تووياما أيما (Tooyama Ema)";
preg_match("/(.+) \((.+)\)/", $str, $matches);

var_dump($matches);

答案 1 :(得分:3)

我建议使用数据库驱动的解决方案,与使用PHP相比,编写和运行所需的时间更少。

在表名上不确定,但这里有你需要的东西,根据你的喜好改变:

(假设粗表定义)

CREATE TABLE Test (
  id int(11) not null auto_increment,
  Author varchar(255),
  primary key (id)
)

新列的alter table:

ALTER TABLE Test ADD COLUMN `arabic_name` varchar(255) AFTER `Author`;
ALTER TABLE Test ADD COLUMN `english_name` varchar(255) AFTER `arabic_name`;

一个简单的更新语句来迁移数据(不是最漂亮,但工作得很好):

 UPDATE Test
 SET
 arabic_name = SUBSTR(TRIM(Author), 1, LOCATE(' ', TRIM(Author)) - 1),
 english_name = SUBSTR(TRIM(Author), LOCATE('(', TRIM(Author)) + 1, LOCATE(')', TRIM(Author)) -  LOCATE('(', TRIM(Author)) - 1);