我的表格中有一列'名称',如下所示:
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 ('...','...')
请帮助..
答案 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;
)