Oracle

oracle在最後一個豎線之後找到第一個連字元

  • February 16, 2020

oracle 使用 REGEXP_REPLACE 在最後一個豎線之後找到第一個連字元

SELECT REGEXP_REPLACE ('sadsa|dd|g - g|hh|yyyyy - tttt - ooo', '.*(\|)(?!.*\|).*?\-{1}', '' ) FROM dual;

字元串輸入

'sadsa|dd|g - g|hh|yyyyy - tttt - ooo'

預期產出

'sadsa|dd|g - g|hh|yyyyy -'

此正則表達式適用於記事本++,但不適用於 oracle

.*(\|)(?!.*\|).*?\-{1}
create table t (
 c varchar2(64)
);

insert into t values ('sadsa|dd|g - g|hh|yyyyy - tttt - ooo');
insert into t values ('sadsa|dd|g - g|hh|yyyyy - tttt | - ooo');
insert into t values ('sad -sa|dd|g - g|hh|yy yyy tttt ooo');

select regexp_replace(c,'(.*)\|([^|-]*)-[^|]*','\1|\2-') from t;

sadsa|dd|g - g|hh|yyyyy -
sadsa|dd|g - g|hh|yyyyy - tttt | -
sad -sa|dd|g -|hh|yy yyy tttt ooo

http://sqlfiddle.com/#!4/45eb2f/1

引用自:https://dba.stackexchange.com/questions/259617