【问题标题】:How to select a substring after some dots in Oracle SQL如何在 Oracle SQL 中的一些点之后选择子字符串
【发布时间】:2020-03-19 09:10:48
【问题描述】:

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

我的 DB 类有几个 SQL 查询,但我遇到了某个 SELECT 查询的问题。

问题是我有一个作者姓名列表(例如:“J.K. Rowling”、“C.Maree”……),我必须在第一列中选​​择首字母,在第二列中选择姓氏。

我首先尝试了这种方法:

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

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

姓名首字母:
J
姓氏:
K.罗琳

当我想拥有 姓名首字母:
JK
姓氏:
罗琳

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

期待您的回答!

【问题讨论】:

    标签: regex oracle select substring


    【解决方案1】:

    您可以按如下方式使用正则表达式函数:

    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, '[^.]*$', '') initials,
        regexp_substr(nom, '[^.]*$') lastname
    from t
    
    姓名首字母 |姓 :------- | :-------- J.K. |罗琳 C. |马里

    【讨论】:

      猜你喜欢
      • 2020-12-30
      • 2018-03-14
      • 1970-01-01
      • 2011-05-22
      • 2017-11-29
      • 2018-05-01
      • 2018-10-25
      • 2021-01-01
      • 2020-05-12
      相关资源
      最近更新 更多