将一列分成两列 (SQL)


separate a column into two columns (sql)

我有包含以下信息的列:

Author  varchar(255)    utf8_general_ci

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

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

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

我推荐一个数据库驱动的解决方案,应该比使用 PHP 花费更少的编码和运行时间。

不确定表名,但这是您需要的肉,请根据自己的喜好进行更改:

(假设粗略的表格定义)

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

新列的更改表:

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);
$str = "تووياما أيما (Tooyama Ema)";
preg_match("/(.+) '((.+)')/", $str, $matches);
var_dump($matches);