-2

以下のデータ文字列があります。オラクルの正規表現を使用して数値だけを取得する方法は、最後の 2 文字は常に「RC」または「RN」です。数値が見つからない場合は 0 を返します。

1AEABCRC

1AEABC1RC

1AEABC1RN

1AEABC2RN
4

3 に答える 3

1
select 
   nvl(regexp_substr(column_name, '(\d*)(RC|RN)$', 1, 1, null, 1), 0)
from table_name;
于 2013-03-05T17:23:02.977 に答える
0

これはうまくいくようです。数値を数値として使用するか、文字として使用するかどうかはわかりませんが、次のようになります。

select nvl(substr(regexp_replace('1AEABCRC','^1[A-Z]+'),1,1),to_char(0,'9')) from dual;
select nvl(substr(regexp_replace('1AEABC1RC','^1[A-Z]+'),1,1),to_char(0,'9')) from dual;
select nvl(substr(regexp_replace('1AEABC1RN','^1[A-Z]+'),1,1),to_char(0,'9')) from dual;
select nvl(substr(regexp_replace('1AEABC2RC','^1[A-Z]+'),1,1),to_char(0,'9')) from dual;

もちろん、文字列リテラルを列名や変数などに置き換えることができます。数字が 2 桁になると機能しません。

于 2013-03-06T00:44:26.227 に答える
0

次のようなことを試すことができます:

select nvl(regexp_replace(regexp_substr(v, '\d+(RC|RN)$'), '(\d+)(RC|RN)$', '\1'), 0)
from t;

ここにsqlfiddleのデモがあります

于 2013-03-05T17:02:32.910 に答える