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

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

【问题讨论】:

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

标签: sql oracle concatenation oracle-sqldeveloper


【解决方案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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-01
        • 2021-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多