从表中复制全名并将名字和姓氏插入新表的单独列中
Posted
技术标签:
【中文标题】从表中复制全名并将名字和姓氏插入新表的单独列中【英文标题】:Copy full name from a table and insert first name and last name into new table separate columns 【发布时间】:2021-04-08 18:31:15 【问题描述】:我正在使用 SQL Server,并且在一个表中有一个名为“全名”的列。我想将名字和姓氏分开,并将它们放在另一个表中自己的列中。
TABLE 1
**Full Name** (all one columns)
Joe Mamma
Fred Flintstone
Frank ford
John Doe
TABLE 2
**First Name**( Col1) **Last Name** (Column2)
Joe Mamma
Fred Flintstone
Frank ford
John Doe
这是我用来分隔名称的代码:
alter table mytable
add
first_name as LEFT(Full_Name,CHARINDEX(' ',Full_Name )-1)
, Last_Name as RIGHT(Full_Name, LEN(Full_Name)- CHARINDEX(' ', Full_Name))
select * from mytable
但这会在原始表中创建单独的列。有没有一种方法可以复制而不创建列?
谢谢!
【问题讨论】:
请提供样本数据、所需结果和数据库标签。明确说明如何处理中间名、多部分名字和姓氏以及后缀。 不要在表之间复制数据。 出色的测试数据:Malcolm McDowell、Conan O'Brien、Carl van der Walt 和 Jonathan Rhys-Davies。 但是为什么要复制信息?这通常是一件坏的事情。您将所有值都放在一个表中 - 没有充分的理由不应该将它们复制到另一个表中。 所需结果显示为“表 2” 目前不需要中间名称、第一部分信息或后缀。谢谢! 【参考方案1】:我不会更改原始表格。
假设您已经创建了一个表(我们称之为 newtable),其中包含列 first_name 和 last_name:
SELECT
LEFT(Full_Name,CHARINDEX(' ',mytable.Full_Name )-1) as first_name,
RIGHT(Full_Name, LEN(mytable.Full_Name)- CHARINDEX(' ', mytable.Full_Name)) as last_name
INTO newtable
FROM mytable
GO
编辑: 如果要填写名和姓的表已经存在,可以使用update语句:
编辑更正语法以与其他开源引擎相对的 T-SQL 保持一致
UPDATE
newtable
SET
newtable.first_name = LEFT(Full_Name,CHARINDEX(' ',mytable.Full_Name )-1),
newtable.last_name = RIGHT(Full_Name, LEN(mytable.Full_Name)- CHARINDEX(' ', mytable.Full_Name))
FROM
mytable
INNER JOIN
newtable
ON
mytable.full_name = newtable.full_name;
这要求有一个关联两个表的键(在本例中为 person_id),因此更新语句可以根据 mytable 中的行匹配它需要从 new_table 更新哪些行。
【讨论】:
您好,谢谢!我收到一个错误,说名称表已经存在,是否可以更改表而不是创建新表? 你可以做一个更新语句。刚刚编辑了解决方案给一个 该死,我要过滤的参与者 ID 键中有空值!有没有其他方法可以分组?感谢您的所有帮助! 如果新表有 full_name、first_name 和 last_name 文件,您可以分两步完成: 1) 将 mytable 中的所有全名插入到 newtable。将 first_name 和 last_name 留空。 2)使用解决方案中提到的更新,但不是person_id,而是作为key,使用full_name。我还在解决方案中发现了一个错误,我将修复shortl。 这不是 SQL Server 中 UPDATE 的有效语法【参考方案2】:您可以使用现有代码,但只需执行 SELECT INTO
即可创建新表。
SELECT LEFT(Full_Name,CHARINDEX(' ',Full_Name )-1) AS first_name
,RIGHT(Full_Name, LEN(Full_Name)- CHARINDEX(' ', Full_Name)) AS Last_Name
INTO table2
from mytable
【讨论】:
以上是关于从表中复制全名并将名字和姓氏插入新表的单独列中的主要内容,如果未能解决你的问题,请参考以下文章
如何比较两个表的列并将值插入到基于 SQL Server 中存储过程中的比较的新表中
SQL 语法从表中选择某些内容,如果结果不存在,则将结果插入新表中
使用 PDO 和 PHP 将表单中的数据插入 MySQL 数据库