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
我有 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