将mysql名称列拆分为第一个和第二个姓氏
数据库表中的一列称为“name”。它在一个字段中包含一个名字和一个姓氏。我需要想出一个干净、高效的方法将这一列一分为二 3列: 姓名(名字和姓氏) Firstname(当前为空,名称的前半部分应放在此处,如果有插入项,例如(Fred de Bakker),则“Fred”应为Firstname) 姓氏(当前为空,名称的后半部分应放在此处,如果有插入项,例如(Fred de Bakker),则“de Bakker”应为姓氏) 我需要做的是:把名字一分为二,然后把名字和姓氏放在一起 如果有人能告诉我如何做这类事情,我会非常感激,因为我以前在SQL中从未做过类似的事情 数据库引擎:MySQL将mysql名称列拆分为第一个和第二个姓氏,mysql,Mysql,数据库表中的一列称为“name”。它在一个字段中包含一个名字和一个姓氏。我需要想出一个干净、高效的方法将这一列一分为二 3列: 姓名(名字和姓氏) Firstname(当前为空,名称的前半部分应放在此处,如果有插入项,例如(Fred de Bakker),则“Fred”应为Firstname) 姓氏(当前为空,名称的后半部分应放在此处,如果有插入项,例如(Fred de Bakker),则“de Bakker”应为姓氏) 我需要做的是:把名字一分为二,然后把名字和姓氏放在一起 如果有人能告诉我如
存储引擎:InnoDB应该是这样的:
UPDATE
`my_table` AS `dest`,
(
SELECT
`name`
FROM
`my_table`
) AS `src`
SET
`dest`.`firstname` = substr(`src`.`name`, 1, char_length(`src`.`name`) - instr(reverse(`src`.`name`),' ')),
`dest`.`surname` = substr(`src`.`name`, char_length(`src`.`name`) - instr(reverse(`src`.`name`),' ')+2)
WHERE
`dest`.`name` = `src`.`name`;
请注意,surename中可能有空格,但它仍然可以工作。类似的内容
**Schema (MySQL v5.7)**
CREATE TABLE Names
(`Name` varchar(255), `Firstname` varchar(255),`Surname` varchar(255))
;
INSERT INTO Names
(`Name`)
VALUES
('Fred de Bakker'),
('Fred2 Bakker2')
;
UPDATE Names
SET Firstname=(select substring_index(Name, " ", 1)),
Surname=(select substring_index(Name, " ", -1));
---
**Query #1**
select * from Names;
| Name | Firstname | Surname |
| -------------- | --------- | ------- |
| Fred de Bakker | Fred | Bakker |
| Fred2 Bakker2 | Fred2 | Bakker2 |
---
请问MySQL的版本是什么?