Проблема в том, что ваше оригинальное выражение слишком широкое. Он соответствует последовательности символов, отличных от da sh (-
) в конце строки: поэтому, если строка не содержит da sh, она полностью совпадает и подавляется.
Вы можете добавить da sh к регулярному выражению, чтобы оно было частью совпадения. Несоответствующие строки остаются нетронутыми REGEXP_REPLACE()
:
SELECT REGEXP_REPLACE (mycol, '-[^-]+$' , '-') FROM dual;
Демонстрация на DB Fiddle :
with t as (
select 'PCB terminal block, nominal current: 4 A, rated voltage (III/2): 250 V, nominal cross section' mycol from dual
union all select 'PCB terminal block - FRONT 2,5-V/SA 5/10 BK - 1109601' from dual
)
select mycol, regexp_replace(mycol, '-[^-]+$' , '-') from t
MYCOL | REGEXP_REPLACE(MYCOL,'-[^-]+$','-')
:-------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------
PCB terminal block, nominal current: 4 A, rated voltage (III/2): 250 V, nominal cross section | PCB terminal block, nominal current: 4 A, rated voltage (III/2): 250 V, nominal cross section
PCB terminal block - FRONT 2,5-V/SA 5/10 BK - 1109601 | PCB terminal block - FRONT 2,5-V/SA 5/10 BK -
Обратите внимание, что не требуется и не требуется экранировать da sh в классе символов.