试图在 Oracle SQL 中将 FULL_NAME 分成 FIRST_NAME 和 LAST_NAME,但它没有显示 table 本身的任何变化

Trying to separate a FULL_NAME into FIRST_NAME and LAST_NAME in Oracle SQL, but it does not show any changes on the table itself

此代码应该分隔全名,而且确实如此。这段代码工作正常,除了它没有将数据添加到 table.

SELECT FULL_NAME
SUBSTR(FULL_NAME, 1, INSTR(FULL_NAME, ' ', 1, 1)-1) as FIRST_NAME,
SUBSTR(FULL_NAME, INSTR(FULL_NAME, ' ', -1)+1) as LAST_NAME
from customers;

此代码运行方式类似,但同样不会填充 table。

ALTER TABLE CUSTOMERS;

SELECT
    substr("A1"."FULL_NAME", 1, instr("A1"."FULL_NAME", ' ', 1, 1) - 1)                 "FIRST_NAME",
    substr("A1"."FULL_NAME", instr("A1"."FULL_NAME", ' ',(- 1)) + 1)                    "LAST_NAME"
FROM
    "XXXX"."CUSTOMERS" "A1";

This is what my query result is, it shows that everything is how it should be.

This is what my table looks like but as you can see, the last two columns do not have any data.

我的目标是能够删除 FULL_NAME 列,但我需要先将这两个拆分,但我不确定为什么它不起作用。感谢任何帮助。

一条SELECT语句只显示数据。它不会改变它。 ALTER TABLE 是一个 DDL 命令,它实际上会改变 table 的结构(比如添加一列),但你没有告诉它要做什么;它不会更改数据。使用 UPDATE 更改数据值:

UPDATE CUSTOMERS SET
    FIRST_NAME = SUBSTR(FULL_NAME, 1, INSTR(FULL_NAME, ' ', 1, 1)-1),
    LAST_NAME = SUBSTR(FULL_NAME, INSTR(FULL_NAME, ' ', -1)+1);
COMMIT;

您可以使用生成的列:

ALTER TABLE CUSTOMERS
    ADD FIRST_NAME AS substr("FULL_NAME", 1, instr("FULL_NAME", ' ', 1, 1) - 1);

ALTER TABLE CUSTOMERS
    ADD LAST_NAME AS  substr("FULL_NAME", instr("FULL_NAME", ' ',(- 1)) + 1) ;

这些是在引用时计算的,因此值始终是最新的。不需要 UPDATE

注意:我强烈反对您对列名使用双引号。不需要他们。

Here 是一个 db<>fiddle.