添加一个表示两个其他 Varchar 列的串联的列

Posted

技术标签:

【中文标题】添加一个表示两个其他 Varchar 列的串联的列【英文标题】:Add a Column that Represents a Concatenation of Two Other Varchar Columns 【发布时间】:2014-09-03 22:43:25 【问题描述】:

我有一个员工表,我想添加第三列,该列的值是名字和姓氏的串联,称为“FullName”。如何在不丢失前两列中任何一列的任何数据的情况下做到这一点?

【问题讨论】:

第二张桌子在哪里?如果您只是连接表中的两列,为什么不将其添加为另一列? 是否有充分的理由添加新列?您可以即时生成连接的字符串。 它只有一个表,而是一个合并的新列。 @StampinStephie,您最初在问题中有几个错别字,您说的是“表格”而不是“列”。这就是评论的来源。不过,我编辑了这个问题,所以它们现在已经修复了。 感谢马修!这是漫长的一天 【参考方案1】:

快速前言:这个答案是基于这个问题与 SQL Server 相关的最初不正确的标签。我不再知道它在 Oracle SQL Developer 上的有效性。

ALTER TABLE Employees ADD FullName AS (FirstName + ' ' + LastName)

尽管在实践中,我建议您在 SELECT 中执行该操作。这有点个人偏好,但我倾向于认为在最终查询中执行操作比存储额外的计算列更清洁、更易读且更易于维护。

编辑:

最终找到了答案,并被 OP 列为对这篇文章的评论。以下是适用于 Oracle Sql 数据库的语法。

ALTER TABLE emps MODIFY (FULL_NAME VARCHAR2(50) GENERATED ALWAYS AS (first_name || ' ' || last_name) VIRTUAL); 

【讨论】:

好的,我这样做了,它看起来像是添加了它,但是当我选择显示它时,我得到了无效的数字错误从第 2 行开始:命令中的 2 - SELECT full_name FROM EMPS 错误报告 - SQL错误:ORA-01722:无效号码 01722。00000 -“无效号码” *原因:*操作: @StampinStephie 很有趣。我什至不认识那个错误的语法......你使用的是什么版本的 SQL Server? 它的 SQL 开发者 4.0.2.15 这听起来确实像 Oracle 服务器,而不是您标记的 Microsoft SQL Server。我不熟悉 Oracle SQL 的语法。当您使用类似的列进行选择时会发生什么? SELECT FirstName + ' ' + LastName FROM EMPS 我得到了没有“全名”的正确输出。该列名为 FIRST_NAME||''||LAST_NAME【参考方案2】:

如果您在从数据库中选择时始终需要全名列,那么您可以在创建表员工时创建计算列。

例如:

CREATE TABLE Employee
(
  FirstName VARCHAR(20),
  LastName VARCHAR(20),
  FullName AS CONCAT(FirstName,' ',LastName)
)

INSERT INTO Employee VALUES ('Rocky','Jeo')

SELECT * FROM Employee 

  Output:

  FirstName  LastName  FullName
  Rocky      Jeo       Rocky Jeo

【讨论】:

【参考方案3】:

这取决于您的目的,您是真的需要向数据库中添加新列,还是只需要根据需要查询出“全名”。

要即时查看,只需运行查询

SELECT firstname + ' ' + lastname AS FullName FROM employees

除此之外,您还可以创建一个简单的存储过程来存储它。

【讨论】:

【参考方案4】:

(对于单个结果,在 where 条件中使用等于)

select * 
from TABLE_name 
where (Column1+Column2) in (11361+280,11365+250)

【讨论】:

以上是关于添加一个表示两个其他 Varchar 列的串联的列的主要内容,如果未能解决你的问题,请参考以下文章

在C#中检查SQL列的类型

将带有数字的列的类型从 varchar 更改为 int

使用 for 和 if 添加基于数据框中其他列的列值

在其他两个表的列上连接一列的最佳方法

带有可以表示多种数据类型的列的 Rails 模型

从 varchar 更改为 mediumtext 会导致性能下降