10

次の文字列があるとしましょう: テーブルのいくつかのフィールドに 'product=1627;color=45;size=7' があります。色を照会して 45 を取得したい。

このクエリでは:

SELECT REGEXP_SUBSTR('product=1627;color=45;size=7', 'color\=([^;]+);?') "colorID" 
FROM DUAL;

私は得る:

colorID  
---------
color=45;
1 row selected

.

一致した文字列の一部 (この例では 45) を取得することは可能ですか?

4

3 に答える 3

6

これを行う 1 つの方法は、REGEXP_REPLACE を使用することです。文字列全体を正規表現パターンとして定義し、必要な要素だけをreplace string. この例では、ColorID は文字列全体の 3 番目のパターンです

SELECT REGEXP_REPLACE('product=1627;color=45;size=7'
                         , '(.*)(color\=)([^;]+);?(.*)'
                         , '\3') "colorID"  
FROM DUAL;  

より不格好な正規表現ソリューションが存在する可能性がありますが、これは間違いなく機能します。 これがSQLフィドルです。

于 2012-10-23T09:41:06.400 に答える
3

次のようなことを試してください:

SELECT REGEXP_SUBSTR(REGEXP_SUBSTR('product=1627;color=45;size=7', 'color\=([^;]+);?'), '[[:digit:]]+') "colorID"
FROM DUAL;
于 2012-10-23T09:35:38.807 に答える