添加新列,将列值拆分为两个,然后在新列中插入一部分值

时间:2015-01-12 14:19:36

标签: mysql sql split

我的表格中有一列'名称',如下所示:

    Name
Michael Jackson
Chester Bennington
Mike Shinoda

我想拆分'姓名'在FirstName和LastName中的值,blike this:

LastName          FirstName
Jackson          Michael
Bennington       Chester
Shinoda          Mike

而且我还需要创建新列并添加这些值,如果可能的话,所有这些都在一个查询中。 所以作为评论,我有Name,我需要创建LastName,FirstName列,在第一个空格后分​​割Name值,空格前的值将进入LastName,空格后的值将进入FirstName。这是我到目前为止所尝试的:

ALTER TABLE `data` ADD `FirstName` VARCHAR(30),ADD `LastName` VARCHAR(30)  
INSERT INTO `data`(`LastName`,`FirstName`) VALUES ('...','...') 

请帮助..

3 个答案:

答案 0 :(得分:2)

试试这个

UPDATE data SET FirstName = SUBSTRING_INDEX(Name, ' ', 1), LastName = SUBSTRING(SUBSTRING_INDEX(Name, ' ', 2),
       LENGTH(SUBSTRING_INDEX(Name, ' ', 1)) + 1)

修改

正如David Faber所说,可以使用SUBSTRING_INDEX(Name, ' ', -1)来更新LastName列。

答案 1 :(得分:1)

你可以试试这个:

ALTER TABLE `data` ADD `FirstName` VARCHAR(30)
                 , ADD `LastName` VARCHAR(30);

UPDATE `data`
   SET `FirstName` = SUBSTR( `Name`, 1, INSTR(`Name`, ' ') - 1 )
     , `LastName` = SUBSTR( `Name`, INSTR(`Name`, ' ') + 1, LENGTH(`Name`) - INSTR(`Name`, ' ') )
 WHERE `Name` LIKE '% %';

我将WHERE子句与LIKE运算符一起添加到update语句中;如果Name有任何没有空格的值,则可能会失败,因为INSTR()将为这些值返回0。

或者,您可以使用SUBSTR()和RIGHT()来代替LEFT()

UPDATE `data`
   SET `FirstName` = LEFT( `Name`, INSTR(`Name`, ' ') - 1 )
     , `LastName` = RIGHT( `Name`, LENGTH(`Name`) - INSTR(`Name`, ' ') )
 WHERE `Name` LIKE '% %';

希望这有帮助。

答案 2 :(得分:-1)

这是你的桌子。你按照自己的方式使用它。 试试这个

select * from
(
select SUBSTRING ( name ,(select CHARINDEX(' ',name, 0) from table1)+1 , (select LEN(name) from table1)-(select CHARINDEX(' ',name, 0) from table1)-1) as lastname,
SUBSTRING ( name ,0 , (select LEN(name) from table1)-(select CHARINDEX(' ',name, 0) from table1)) as firstname
from table1;
)