我有 3 列来捕获一个人的名字:名字、中间名和姓氏。我有几个条目,其中名字和中间名位于名字列中。
first_name | middle_name | last_name
------------------------------------
James Leroy | | Bond
我需要将中间名移到 middle_name 列中,这样我的表格看起来像这样。
first_name | middle_name | last_name
------------------------------------
James | Leroy | Bond
此任务不够复杂,不需要正则表达式。可以使用简单的字符串函数,并且应该是首选,因为它们更便宜:
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
多么痛苦啊。假设名称中最多有一个空格:
update t
set first_name = regexp_substr(first_name, '[^ ]+'),
middle_name = regexp_substr(first_name, '[^ ]+$)
where first_name like '% %'
在 Oracle 中,如果我们要更新以“/”字符(例如)分隔的现有列,则子字符串出现在每列中的“/”之后。这可以使用 Oracle 中的 SUBSTR() 方法轻松完成,如下所示:
UPDATE TABLE_NAME
SET COLUMN_NAME=SUBSTR(
COLUMN_NAME,
INSTR(COLUMN_NAME, '/')+1,
LENGTH(COLUMN_NAME)-1
) WHERE <CONDITIONS HERE>;