添加一个新列,将列值一分为二,然后在新列中插入一部分值
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 '%/%';
我有一个 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 '%/%';