添加一个列,该列表示两个其他varchar列的串联。

25

我有一个员工表,我想添加第三列作为名字和姓氏连接后的全名,叫做“FullName”。我该如何实现这一点,而不会丢失前两列中的任何数据?


3
第二个表格在哪里?如果你只是将一个表格中的两列连接起来,为什么不将其作为另一列添加进去? - serakfalcon
1
有没有充分的理由添加新列?您可以随时生成连接字符串。 - shree.pat18
它只是一个表格,但有一个新的列被合并了。 - Stampin Stephie
@StampinStephie,您最初在提问中将“列”错误地写成了“表”,这就是那条评论的来源。不过我已经编辑了问题,现在已经修正过来了。 - Matthew Haugen
谢谢Matthew!今天真是漫长的一天。 - Stampin Stephie
请注意:@shree.pat18提出的“即时生成连接字符串”的方法是首选,因为这样您的数据就不会过时。 如果您现在编写一次,然后有人更改了数据库中的名称,那么您的FullNames将过时。此外,您正在复制数据-您永远不应该这样做。通过“即时”连接结果,您实际上只是引用基础数据,因此您保留了一个且仅一个主数据副本。这样,如果它得到更新,您就可以获得更新。 - m1m1k
5个回答

20

简单说明:本答案基于最初有关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行开始的命令中出现错误 - SELECT full_name FROM EMPS 错误报告 - SQL错误:ORA-01722:无效数字 01722. 00000 - “无效数字” *原因: *操作: - Stampin Stephie
不,抱歉,它没有生效。我取消了标记。感谢您的所有帮助。 - Stampin Stephie
所以,等等,你还没有找到解决方案?只是为了明确一下?如果没有,我建议你尝试使用双竖线运算符而不是加号,就像我在答案中提出的语法一样。似乎这就是Oracle SQL用作连接运算符的方式。 - Matthew Haugen
我尝试过了,但它不起作用。目前还没有解决方案。我可以执行以下操作:SELECT emps.first_name || ' ' || emps.last_name AS FULL_NAME FROM emps;并获得正确的列输出,但它不会创建一个新的列。当我尝试执行以下操作时:SELECT employee_id,FULL_NAME,salary,department_id FROM EMPS ORDER BY last_name;它会显示为一列,但没有数据。我也已经使用 ALTER TABLE 添加了它作为一列。 - Stampin Stephie
啊哈!(我想)。根据这个 ,语法是 ...FullName COMPUTED BY first_name||' '||last_name - Matthew Haugen
显示剩余10条评论

6

如果你需要在每次从数据库中选择数据时都包含完整姓名列,那么你可以在创建员工表时创建一个计算列。

例如:

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

2

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

要即时查看它,只需运行以下查询:

SELECT firstname + ' ' + lastname AS FullName FROM employees

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


0
除了 @Jacky 的回答之外,如果您正在尝试将此添加到查询而不是表中,则还可以使用 SELECT 语句中的 CONCAT() 函数。
SELECT CONCAT(FirstName, ' ', LastName) as FullName
FROM table_name

1
你需要连接 ' ',否则它会返回没有空格的 JohnSmith。例如:SELECT CONCAT(FirstName, ' ', LastName) as FullName From Table_name - Jacky
1
你需要连接 ' ',否则它会返回没有空格的 JohnSmith。例如 SELECT CONCAT(FirstName, ' ', LastName) as FullName From Table_name - undefined

0
(对于单个结果,请在where条件中使用等于号)
select * 
from TABLE_name 
where (Column1+Column2) in (11361+280,11365+250)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接