首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一列分隔为两列(sql)

将一列分隔为两列(sql)
EN

Stack Overflow用户
提问于 2012-07-06 20:31:39
回答 2查看 127关注 0票数 1

我有一栏提供了以下信息:

代码语言:javascript
复制
Author  varchar(255)    utf8_general_ci

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

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

我指的是结构相同的许多行。我想改变数据库的结构。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-06 20:58:14

我建议使用db驱动的解决方案,与使用PHP相比,编码和运行时间应该更短。

不确定桌子上的名字,但这是你需要的肉,随你的喜好而改变:

(假设粗略的表定义)

代码语言:javascript
复制
CREATE TABLE Test (
  id int(11) not null auto_increment,
  Author varchar(255),
  primary key (id)
)

新列的alter:

代码语言:javascript
复制
ALTER TABLE Test ADD COLUMN `arabic_name` varchar(255) AFTER `Author`;
ALTER TABLE Test ADD COLUMN `english_name` varchar(255) AFTER `arabic_name`;

用于迁移数据的简单update语句(不是最漂亮的,但工作得很好):

代码语言:javascript
复制
 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);
票数 3
EN

Stack Overflow用户

发布于 2012-07-06 20:35:39

代码语言:javascript
复制
$str = "تووياما أيما (Tooyama Ema)";
preg_match("/(.+) \((.+)\)/", $str, $matches);

var_dump($matches);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11369292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档