【问题标题】:Splitting mysql name column in first and surname [duplicate]在名字和姓氏中拆分mysql名称列[重复]
【发布时间】:2020-12-22 22:41:06
【问题描述】:

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

3 列:

姓名(名字和姓氏)

名字(目前为空,名字的前半部分应该放在这里,如果有插入例如(Fred de Bakker),那么'Fred'应该是名字)

姓氏(目前为空,名字的后半部分应该放在这里,如果有插入例如(Fred de Bakker),那么'de Bakker'应该是姓氏)

我需要做的:把名字分成两半,放入名字和姓氏

如果有人能阐明如何做这种事情,我将不胜感激,因为我以前没有在 SQL 中做过这样的事情。

数据库引擎:MySQL 存储引擎:InnoDB

【问题讨论】:

  • 请问什么版本的 MySQL?

标签: mysql


【解决方案1】:

应该是这样的:

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 中可能有空格,它仍然可以工作。

【讨论】:

    【解决方案2】:

    这样的?

    **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 |
    
    ---
    

    View on DB Fiddle

    【讨论】:

      猜你喜欢
      • 2015-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-17
      相关资源
      最近更新 更多