我有一列存储全名。我需要解析名字、姓氏、中间名、前缀等。
中间名的要求是选择空格之间的名称,然后用 A-z 字符命名,然后用空格命名。敌人前:
Name- My name is
Middle name-> name
Full name-> My n3ame is this
Middle Name-> is
Full name-> My name
Middle name-> NULL
我现在不考虑这个双空格出现两次的情况。我现在只选择第一个出现的情况:
例如:
Full Name-> My name is this
Middle name-> name
我在想如下(但这不考虑只有 A-Z 数据的中间名,上面的场景 2 在这种情况下将给出“n3me”而不是“is”):
SUBSTR(FULL_name,Instr(Full_name,' '),Instr(Full_name,' ',2))
最佳答案
由于您必须排除不是 100% 字母的“单词”(例如 n3ame
),因此使用正则表达式更容易做到这一点。这是一种方法:
with t(full_name) as (
select 'My name is' from dual union all
select 'My n3ame is this' from dual union all
select 'My name' from dual
)
select full_name,
regexp_substr(full_name, '^.*? ([[:alpha:]]+) ', 1, 1, null, 1) middle_name
from t
;
FULL_NAME MIDDLE_NAME
---------------- ----------------
My name is name
My n3ame is this is
My name
这将返回在空格之间找到的由 1 个或多个连续字母组成的字符串的第一次出现。
关于sql - 解析字符串数据以仅选择全名中的中间名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55871362/