Вам необходимо использовать REGEXP_REPLACE с выражением регулярного выражения '\ _ [[: digit:]] {1,}'
Это переводит, чтобы найти (экранированное) подчеркивание с одной или несколькими цифрами после него:
, например
SELECT REGEXP_REPLACE('a_b', '\_[[:digit:]]{1,}'),
REGEXP_REPLACE('aaa_1', '\_[[:digit:]]{1,}'),
REGEXP_REPLACE('c_21', '\_[[:digit:]]{1,}'),
REGEXP_REPLACE('bb_5', '\_[[:digit:]]{1,}')
FROM dual;
Возвращает
a_b
aaa
c
bb
Если вы хотите удостовериться, что удаляете подчеркивание и цифры только тогда, когда нет буквенных символов, то добавьте $ в конец строки регулярного выражения, чтобы обозначить конец строки.
например. Первый с "$", второй без
SELECT REGEXP_REPLACE('bb_5b', '\_[[:digit:]]{1,}$'),
REGEXP_REPLACE('bb_5b', '\_[[:digit:]]{1,}'),
REGEXP_REPLACE('bb_55', '\_[[:digit:]]{1,}$'),
REGEXP_REPLACE('bb_55', '\_[[:digit:]]{1,}')
FROM dual;
Возвращает
bb_5b
bbb
bb
bb
Регулярные выражения могут быть неудобными, но эта ссылка является одной из самых простых для понимания, которую я нашел для выражений регулярных выражений Oracle:
http://www.dba -oracle.com / t_regular_expressions.htm
Надеюсь, это поможет.