Oracle正则表达式

时间:2013-03-05 15:57:06

标签: oracle plsql plsqldeveloper

我有下面的数据字符串,如何使用oracle正则表达式单独获取数字最后两个字符总是“RC”或“RN”。如果找不到数字返回 0

1AEABCRC

1AEABC1RC

1AEABC1RN

1AEABC2RN

3 个答案:

答案 0 :(得分:1)

select 
   nvl(regexp_substr(column_name, '(\d*)(RC|RN)$', 1, 1, null, 1), 0)
from table_name;

答案 1 :(得分:0)

您可以尝试这样的事情:

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

Here is a sqlfiddle demo

答案 2 :(得分:0)

这似乎有效。 Dunno如果您想将数字作为数字或愿意作为char使用,但是:

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;

当然,您可以使用列名或变量或某些内容替换字符串文字。如果数字变为两位数,显然不会起作用。