目前我正在进行数据库重新设计项目.该项目的大部分内容是从旧数据库中提取数据并将其导入新数据库.
旧数据库中表中的一列称为"名称".它在一个字段中包含一个名字和一个姓氏(呃).新表有两列; 姓氏和姓氏.我需要提出一种干净,有效的方法将这一列分成两列.
现在我想在同一张桌子上做所有事情然后我可以很容易地将它转移过来.
3列:
姓名(姓名和姓氏)
Forename(目前为空,名称的前半部分应该在这里)
姓氏(目前是空的,名字的后半部分应该到这里)
我需要做的事情:将名字分成两半并放入姓氏和姓氏
如果有人能够阐明如何做这种事情,我会非常感激,因为我之前没有在SQL中做过这样的事情.
数据库引擎:MySQL
存储引擎:InnoDB
尝试这个:
insert into new_table (forename, lastName, ...) select substring_index(name, ' ', 1), substring(name from instr(name, ' ') + 1), ... from old_table
假设第一个单词是姓氏,其余的是姓氏,则可以正确处理多词姓氏,例如“ John De Lacey”
一个快速的解决方案是使用SUBSTRING_INDEX获取第一个空格左侧的所有内容,以及第一个空格后的所有内容:
UPDATE tablename SET Forename = SUBSTRING_INDEX(Name, ' ', 1), Surname = SUBSTRING_INDEX(Name, ' ', -1)
请看这里的小提琴.它并不完美,因为名称可能有多个空格,但它可以是一个很好的查询,它适用于大多数名称.