【问题标题】:Append & populate first name, last name columns using full name column in same table?使用同一张表中的全名列追加和填充名字、姓氏列?
【发布时间】:2021-06-27 22:59:33
【问题描述】:

我正在使用 SQL Server,并且我有一个名为“全名”的列,它是从单独的表中提取的。我有一列用于名字和姓氏(在许多其他列中)。

这是我找到并使用的代码:

SELECT Full_Name,
       LEFT(Full_Name,CHARINDEX(' ',Full_Name )-1)  AS First_Name,
       RIGHT(Full_Name, LEN(Full_Name)- CHARINDEX(' ', Full_Name)) AS Last_Name
FROM   table_name

提取名称,但在使用此命令查看整个表时:

SELECT * FROM table_name

我没看到?有没有一种方法可用于将数据插入 First_name 和 Last_name 列无需添加任何其他行

谢谢!

【问题讨论】:

  • 您需要将列添加到表中,然后使用 UPDATE 语句(而不是 SELECT 语句)将数据放入这些列中。但是您将如何维护这些数据?

标签: sql sql-server tsql sql-update


【解决方案1】:

也许创建一个视图就足够了:

CREATE VIEW table_name_v
SELECT Full_Name,
       LEFT(Full_Name,CHARINDEX(' ',Full_Name )-1)  AS First_Name,
       RIGHT(Full_Name, LEN(Full_Name)- CHARINDEX(' ', Full_Name)) AS Last_Name
FROM   table_name

然后在后续查询中不使用表名,而是使用视图

SELECT * FROM table_name_v

否则您面临的问题是,如果您将名字和姓氏列添加到此表中,您现在最终需要维护 3 列,或者您可能需要替换使用 full_name 的数据输入屏幕开始使用名字和姓氏列。

如果您确实想通过添加列来继续,您可以尝试使用“计算列”,这将避免更改数据输入屏幕等的必要性。

 CREATE TABLE mytable(
    full_name VARCHAR(15) NOT NULL 
 );
 INSERT INTO mytable(full_name) VALUES ('fred flintstone');
 select * from mytable
full_name
fred flintstone
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
full_name first_name Last_Name
fred flintstone fred flintstone

db计算列的小提琴here

如果您确实想要存储这 2 个单独的列(而不是计算它们),那么您需要将这些列添加到您的表中并运行更新语句来填充它们,如下所示:

alter table mytable
add 
  first_name varchar(100)
, last_name varchar(100)

update mytable
set 
  first_name = LEFT(Full_Name,CHARINDEX(' ',Full_Name )-1)
, Last_Name = RIGHT(Full_Name, LEN(Full_Name)- CHARINDEX(' ', Full_Name))

dbfiddle 用于添加列和更新here

【讨论】:

  • 感谢您的解决方案,解决了!我认为你是对的,我将只创建已经创建的列,这样当添加/删除新数据时,我只需要运行更新函数来获取新信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-07
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 2018-11-27
相关资源
最近更新 更多