以下のデータ文字列があります。オラクルの正規表現を使用して数値だけを取得する方法は、最後の 2 文字は常に「RC」または「RN」です。数値が見つからない場合は 0 を返します。
1AEABCRC
1AEABC1RC
1AEABC1RN
1AEABC2RN
以下のデータ文字列があります。オラクルの正規表現を使用して数値だけを取得する方法は、最後の 2 文字は常に「RC」または「RN」です。数値が見つからない場合は 0 を返します。
1AEABCRC
1AEABC1RC
1AEABC1RN
1AEABC2RN
select
nvl(regexp_substr(column_name, '(\d*)(RC|RN)$', 1, 1, null, 1), 0)
from table_name;
これはうまくいくようです。数値を数値として使用するか、文字として使用するかどうかはわかりませんが、次のようになります。
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 桁になると機能しません。
次のようなことを試すことができます:
select nvl(regexp_replace(regexp_substr(v, '\d+(RC|RN)$'), '(\d+)(RC|RN)$', '\1'), 0)
from t;