【问题标题】:Regexp substr with start position at the end of the string PL/SQL正则表达式 substr,起始位置位于字符串 PL/SQL 的末尾
【发布时间】:2018-11-17 06:54:39
【问题描述】:

我有这样的字符串:

WORK 123 John Smith

10.01.D 5132 3330 Selena Amirez

300 TK30 000 Edvard Ramirez

最后我只想写出名字。我有这样的代码:

regexp_substr(string, '([0-9])( +)(.*)', 1, 1, 'i', 3))

但它只适用于第一行,其中只有一个数字。我的想法是从头开始写作,因为名字总是在最后。所以我想写出名字,起始位置总是最后一个数字的最后一个数字。

所以我想看到的是:

John Smith

Selena Amirez

Edvard Ramirez

提前谢谢你。

【问题讨论】:

    标签: plsql substr regexp-replace regexp-substr


    【解决方案1】:

    这可能是一种方式:

    select regexp_substr(str, '([0-9]+ )([^0-9]*$)', 1, 1, 'i', 2)
    from (
        select 'WORK 123 John Smith' str from dual union
        select '10.01.D 5132 3330 Selena Amirez' from dual union
        select '300 TK30 000 Edvard Ramirez' from dual
    )
    

    给出:

    Selena Amirez                                    
    Edvard Ramirez                                   
    John Smith 
    

    这将获取字符串的非数字 rigt 部分($ 是字符串的结尾),其后跟一个数字部分和一个空格。

    【讨论】:

    • 非常感谢!我需要这个:)
    【解决方案2】:

    另一种选择:

    SQL> with test (col) as
      2    (select 'WORK 123 John Smith'             from dual union
      3     select '10.01.D 5132 3330 Selena Amirez' from dual union
      4     select '300 TK30 000 Edvard Ramirez'     from dual
      5    )
      6  select col, trim(regexp_substr(col, '(\D)+$')) result
      7  from test;
    
    COL                             RESULT
    ------------------------------- -------------------------------
    10.01.D 5132 3330 Selena Amirez Selena Amirez
    300 TK30 000 Edvard Ramirez     Edvard Ramirez
    WORK 123 John Smith             John Smith
    
    SQL>
    

    【讨论】:

      猜你喜欢
      • 2018-11-20
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 2013-10-30
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      • 2013-10-27
      相关资源
      最近更新 更多