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

Oracle split string and update in new column

我有 3 个列来捕获一个人的名字:first_name、middle_name 和 last_name。我有几个条目,其中名字和中间名在 first_name 列中。

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

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

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

什么痛。假设名字中最多有一个space:

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

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

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