如何从以下格式的FULL_NAME列中拆分名称(LAST_NAME,FIRST_NAME和MIDDLE_NAME):
FULL_NAME: BARN,KE ROMAN where FIRST_NAME: KE, MIDDLE_NAME: ROMAN & LAST_NAME: BARN
我能够编写下面的sql,但是,我如何添加MIDDLE_NAME查询以及MIDDLE_NAME是否为null(ex-FULL_NAME:BARN,KE)
SELECT TRIM (SUBSTR (NAMES, INSTR (NAMES, ',', 1) + 1)) AS FIRST_NAME,
TRIM (SUBSTR (NAMES, 1, INSTR (NAMES, ',', 1) - 1)) AS LAST_NAME
FROM TABLE
非常感谢任何帮助!
谢谢!
答案 0 :(得分:0)
我相信regexp_substr()
是您最好的选择:
REGEXP_SUBSTR('BARN,KE ROMAN', '[^ ]*$')
这会锚定到字符串$
的末尾,然后向前看直到它到达空间。那[^ ]
位就像是说'#34;每个不是空格的角色"。
正如其他人所指出的那样,如果你的中间名称中有空格,这就是一个废话。如果您的姓名不匹配first,last middle
格式,您只需要希望关闭。
答案 1 :(得分:0)
这样的事情应该有用 - 涵盖输入字符串的几种可能的格式。例如(参见第二个输入)它允许逗号和名字之间留空格或没有空格。
with input_names (input_str) as (
select 'Barn,KE Roman' from dual union all
select 'Utry, Rita' from dual union all
select 'Jam,Ilya-Dimo' from dual
)
select regexp_substr(input_str, '^([^,]+),' , 1, 1, null, 1) as last_name,
regexp_substr(input_str, ',\s*([^\s]+)' , 1, 1, null, 1) as first_name,
regexp_substr(input_str, ',\s*[^\s]+\s+(.*)', 1, 1, null, 1) as middle_name
from input_names;
结果:
LAST_NAME FIRST_NAME MIDDLE_NAME
-------------------- -------------------- --------------------
Barn KE Roman
Utry Rita
Jam Ilya-Dimo
答案 2 :(得分:0)
SELECT Substr(fullname, 1, Instr(fullname, ' ') - 1) AS First_Name,
Substr(fullname, Instr(fullname, ' ') + 1) AS Last_Name
FROM emp;
SELECT Substr('Amit Chauhan', 1, Instr('Amit Chauhan', ' ') - 1) AS First_Name,
Substr('Amit Chauhan', Instr('Amit Chauhan', ' ') + 1) AS Last_Name
FROM dual;