Oracle 拆分字符串并在新列中更新

问题描述 投票:0回答:3

我有 3 列来捕获一个人的名字:名字、中间名和姓氏。我有几个条目,其中名字和中间名位于名字列中。

first_name   | middle_name | last_name
------------------------------------
James Leroy  |             | Bond

我需要将中间名移到 middle_name 列中,这样我的表格看起来像这样。

first_name | middle_name | last_name
------------------------------------
James      | Leroy       | Bond
sql string oracle sql-update substring
3个回答
1
投票

此任务不够复杂,不需要正则表达式。可以使用简单的字符串函数,并且应该是首选,因为它们更便宜:

update mytable
set 
    first_name = substr(first_name, 1, instr(first_name, ' ') - 1),
    last_name  = substr(first_name, instr(first_name, ' ') + 1)
where instr(first_name, ' ') > 0

0
投票

多么痛苦啊。假设名称中最多有一个空格:

update t
    set first_name = regexp_substr(first_name, '[^ ]+'),
        middle_name = regexp_substr(first_name, '[^ ]+$)
    where first_name like '% %'

0
投票

在 Oracle 中,如果我们要更新以“/”字符(例如)分隔的现有列,则子字符串出现在每列中的“/”之后。这可以使用 Oracle 中的 SUBSTR() 方法轻松完成,如下所示:

UPDATE TABLE_NAME
SET COLUMN_NAME=SUBSTR(
        COLUMN_NAME, 
        INSTR(COLUMN_NAME, '/')+1,
        LENGTH(COLUMN_NAME)-1
) WHERE <CONDITIONS HERE>;
© www.soinside.com 2019 - 2024. All rights reserved.