0
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 

結果から「、」を削除する必要があります。また、最後の文字列を出力として使用します。つまり、「1、2、3」から3つ、 「8、19、5」から5つです。どうすればいいですか?

4

2 に答える 2

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

コメントへの回答

最初の文字列から文字列2を取得し、2番目の文字列から19文字列を取得する方法は??

関数の4番目のパラメーターはregexp_substr、パターンの出現です。したがって、文字列の2番目の単語を取得するには、次のように使用できます。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
于 2012-11-20T09:53:53.100 に答える
0
SELECT REGEXP_SUBSTR(REGEXP_SUBSTR('one,two,three',',[^,]+$'),'[^,]+') AS reg_result FROM DUAL;

Oracleに後読みがあるかどうかはわかりませんが、これも試すことができます。

SELECT REGEXP_SUBSTR('one,two,three','(?<=,)[^,]+$') AS reg_result FROM DUAL;
于 2012-11-20T09:46:51.603 に答える