-2

我有以下数据字符串,如何使用 oracle 正则表达式单独获取数字最后两个字符始终是“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(regexp_replace(regexp_substr(v, '\d+(RC|RN)$'), '(\d+)(RC|RN)$', '\1'), 0)
from t;

这是一个 sqlfiddle 演示

于 2013-03-05T17:02:32.910 回答
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;

当然,您可以用列名或变量等替换字符串文字。显然,如果数字达到两位数,将不起作用。

于 2013-03-06T00:44:26.227 回答