REGEXP_SUBSTR所需的输出

时间:2012-11-20 09:44:29

标签: regex oracle oracle11g

SELECT REGEXP_SUBSTR('one,two,three',',[^,]+') AS reg_result FROM DUAL;

REG_RESULT    
,two          

SELECT REGEXP_SUBSTR('eight,nineteen,five',',[^,]+') AS reg_result FROM DUAL;  

REG_RESULT    
,nineteen 

我必须从结果中删除“,”。我也想要最后一个字符串 作为输出。即来自“一,二,三”的从'八,十九,五'中。  我该怎么办?

2 个答案:

答案 0 :(得分:1)

如果想在不检查字符串是否符合特定模式的情况下获取最后一个字:

SQL> with t1 as(
  2    select 'one,two,three' as str from dual
  3  )
  4  select regexp_substr(str, '([[:alpha:]]+)$') last_word
  5    from t1
  6  ;

LAST_WORD
---------
three

对评论的回复

  

如何从第一个和第一个获得字符串二从第二个十九岁开始?

regexp_substr函数的第四个参数是模式的出现。因此,为了获得字符串中的第二个单词,我们可以使用regexp_substr(str, '[^,]+', 1, 2)

SQL> with t1 as(
  2        select 'one,two,three' as str from dual
  3      )
  4  select regexp_substr(str, '[^,]+', 1, 2) as Second_Word
  5       from t1;

Second_Word
---------
two

如果需要从字符串中提取每个单词:

-- sample of data from your question
SQL> with t1 as(
  2     select 'one,two,three' as str from dual union all
  3     select 'eight,nineteen,five' from dual
  4  ), -- occurrences of the pattern
  5  occurrence as(
  6   select level as ps
  7     from ( select max(regexp_count(str, '[^,]+')) mx
  8              from t1
  9           ) s
 10    connect by level <= s.mx
 11  ) -- the query
 12  select str
 13       , regexp_substr(str, '[^,]+', 1, o.ps) word
 14       , o.ps as word_num
 15    from t1 t
 16     cross join occurrence o
 17  order by str
 18  ;

STR                  WORD          WORD_NUM
-------------------  ----------- ----------
eight,nineteen,five  eight                1
eight,nineteen,five  nineteen             2
eight,nineteen,five  five                 3
one,two,three        three                3
one,two,three        one                  1
one,two,three        two                  2

6 rows selected

答案 1 :(得分:0)

SELECT REGEXP_SUBSTR(REGEXP_SUBSTR('one,two,three',',[^,]+$'),'[^,]+') AS reg_result FROM DUAL;

我不确定甲骨文是否具有外观,但你也可以试试这个:

SELECT REGEXP_SUBSTR('one,two,three','(?<=,)[^,]+$') AS reg_result FROM DUAL;
相关问题