在SQL中将单个列(名称)拆分为两个(forename,surname)

 我-是二毛控控控_ 发布于 2023-02-13 14:37

目前我正在进行数据库重新设计项目.该项目的大部分内容是从旧数据库中提取数据并将其导入新数据库.

旧数据库中表中的一列称为"名称".它在一个字段中包含一个名字和一个姓氏().新表有两列; 姓氏和姓氏.我需要提出一种干净,有效的方法将这一列分成两列.

现在我想在同一张桌子上做所有事情然后我可以很容易地将它转移过来.

3列:

姓名(姓名和姓氏)

Forename(目前为空,名称的前半部分应该在这里)

姓氏(目前是空的,名字的后半部分应该到这里)

我需要做的事情:将名字分成两半并放入姓氏和姓氏

如果有人能够阐明如何做这种事情,我会非常感激,因为我之前没有在SQL中做过这样的事情.

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

2 个回答
  • 尝试这个:

    insert into new_table (forename, lastName, ...)
    select
      substring_index(name, ' ', 1),
      substring(name from instr(name, ' ') + 1),
      ...
    from old_table
    

    假设第一个单词是姓氏,其余的是姓氏,则可以正确处理多词姓氏,例如“ John De Lacey”

    2023-02-13 14:40 回答
  • 一个快速的解决方案是使用SUBSTRING_INDEX获取第一个空格左侧的所有内容,以及第一个空格后的所有内容:

    UPDATE tablename
    SET
      Forename = SUBSTRING_INDEX(Name, ' ', 1),
      Surname = SUBSTRING_INDEX(Name, ' ', -1)
    

    请看这里的小提琴.它并不完美,因为名称可能有多个空格,但它可以是一个很好的查询,它适用于大多数名称.

    2023-02-13 14:41 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有