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

Adding a new column,splitting a column value in two then insert a part of the value in the new column

我有一个 table 列 'Name',如下所示:

    Name
Michael Jackson
Chester Bennington
Mike Shinoda

我想拆分 FirstName 和 LastName 中的 'Name' 值,像这样:

LastName          FirstName
Jackson          Michael
Bennington       Chester
Shinoda          Mike

而且我还需要创建新列并添加这些值,如果可能的话,所有这些都在一个查询中完成。 因此,作为回顾,我有姓名,我需要创建姓氏、名字列,在第一个空白 space 之后拆分姓名值,空白 space 之前的值将进入姓氏,之后的值空白 space 将进入 FirstName。这是我到目前为止尝试过的:

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

请帮忙..

试试这个

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 列。

这是你的table。你想怎么用就怎么用。 试试这个

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;
)

你可以试试这个:

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 '% %';

我在更新语句中添加了带有 LIKE 运算符的 WHERE 子句;否则,如果 Name 有任何不带空格的值,它可能会失败,因为 INSTR() 将为这些值 return 0。

或者,您可以使用 LEFT() 和 RIGHT()`:

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

希望对您有所帮助。

INSTR 显示错误,因此使用 POSITION。我正在尝试拆分字符 '/':

处的列
UPDATE pincode
   SET latitude = LEFT( coordinates, POSITION('/' IN coordinates) - 1 )
     , longitude = RIGHT( coordinates, LENGTH(coordinates) - POSITION('/' IN coordinates) )
 WHERE coordinates LIKE '%/%';