sql - 解析字符串数据以仅选择全名中的中间名

标签 sql oracle substring string-length sql-query-store

我有一列存储全名。我需要解析名字、姓氏、中间名、前缀等。

中间名的要求是选择空格之间的名称,然后用 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/

相关文章:

mysql - 如何估计 mysql 搜索查询中的行数?

每次操作后的 MySQL SUM 和 MIN

Oracle LOB 未内联存储

sql - 使用 Oracle 中同一表中的其他行数据更新一行

php - MySQL DAYNAME 明智地检索不同时区的数据

具有日期范围的 SQL JOIN 表

sql - 是否有像 Oracle SQL 中的 SUM 函数那样的 PRODUCT 函数?

c - 如何从字符串中提取某个字符后的子字符串?

php - 如何从字符串中获取前5个字符