将mysql名称列拆分为第一个和第二个姓氏

将mysql名称列拆分为第一个和第二个姓氏,mysql,Mysql,数据库表中的一列称为“name”。它在一个字段中包含一个名字和一个姓氏。我需要想出一个干净、高效的方法将这一列一分为二 3列: 姓名(名字和姓氏) Firstname(当前为空,名称的前半部分应放在此处,如果有插入项,例如(Fred de Bakker),则“Fred”应为Firstname) 姓氏(当前为空,名称的后半部分应放在此处,如果有插入项,例如(Fred de Bakker),则“de Bakker”应为姓氏) 我需要做的是:把名字一分为二,然后把名字和姓氏放在一起 如果有人能告诉我如

数据库表中的一列称为“name”。它在一个字段中包含一个名字和一个姓氏。我需要想出一个干净、高效的方法将这一列一分为二

3列:

姓名(名字和姓氏)

Firstname(当前为空,名称的前半部分应放在此处,如果有插入项,例如(Fred de Bakker),则“Fred”应为Firstname)

姓氏(当前为空,名称的后半部分应放在此处,如果有插入项,例如(Fred de Bakker),则“de Bakker”应为姓氏)

我需要做的是:把名字一分为二,然后把名字和姓氏放在一起

如果有人能告诉我如何做这类事情,我会非常感激,因为我以前在SQL中从未做过类似的事情

数据库引擎:MySQL
存储引擎: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的版本是什么?