如何在Oracle SQL

所以这是我在这里的第一篇文章,所以我会尽力正确地问我的问题^^

对于我的数据库类,我有一些SQL查询,并且遇到某些SELECT查询的问题。

问题是我有一个作者姓名列表(例如:'J.K。Rowling','C.Maree',...),我必须在第一列中选​​择姓名缩写,在第二列中选择姓氏。

我首先尝试了这种方法:

SELECT SUBSTR(NOM,INSTR(NAME,'.')-1) AS INITIALS,SUBSTR(NOM,INSTR(NOM,'.')+1) AS LASTNAME
FROM AUTHOR

但这仅适用于只有一个组合名称的作者,例如J.K。罗琳,我会有类似的东西:

首创:
 J
     姓氏:
            罗琳(K. Rowling)

当我试图拥有 初始值:
 J·K
     姓氏:
             罗琳

我已经搜索了很多东西,但我不知道如何解决这个问题,但是找不到我想要的东西。

期待您的回答!

xw7932 回答:如何在Oracle SQL

您可以按如下方式使用regexp函数:

select 
    regexp_replace(nom,'[^.]*$','') initials,regexp_substr(nom,'[^.]*$') lastname
from t

第一个表达式搜索字符串末尾除点以外的其他字符序列,并对其进行抑制:这将为您提供首字母缩写。

第二个表达式捕获相同的字符序列,即姓氏。

Demo on DB Fiddle

with t as (
    select 'J.K.Rowling' nom from dual
    union all select 'C.Maree' from dual
)
select 
    regexp_replace(nom,'[^.]*$') lastname
from t
INITIALS | LASTNAME
:------- | :-------
J.K.     | Rowling 
C.       | Maree   
本文链接:https://www.f2er.com/3045393.html

大家都在问