在字符前后使用regexp_replace替换字符

时间:2019-09-20 21:40:05

标签: sql regex oracle

我是新来的REGEXP_REPLACE()。我想将0替换为'-'位,例如:30000000176215001500我们得到3-176215001500

我尝试使用regexp_replace('30000000176215001500','([0])','-'),但是它将所有0更改为-

这是我的期望:

  
      
  1. 300000011749341779103-1174934177910
  2.   
  3. 300000001749341779103-174934177910
  4.   
  5. 3018731305203-1873130520
  6.   
  7. 3001731305203-173130520
  8.   

1 个答案:

答案 0 :(得分:5)

考虑:

regexp_replace(mycol,'0+','-', 1, 1)

Rationale:第五个参数大于0时,指定应替换出现的位置;设置为0时,所有出现的事件都将被替换。

原始正则表达式的其他显着变化:

  • 括号定义捕获组;因为您不需要捕获,所以多余的
  • 方括号定义字符类;不需要,因为您只匹配一个字符

Demo on DB Fiddle

with a as (
    select '30000001174934177910' mycol from dual
    union all select '30000000174934177910' from dual
    union all select '301873130520' from dual
    union all select '300173130520' from dual
)
select mycol input, regexp_replace(mycol,'0+','-', 1, 1) output from a
INPUT                | OUTPUT         
:------------------- | :--------------
30000001174934177910 | 3-1174934177910
30000000174934177910 | 3-174934177910 
301873130520         | 3-1873130520   
300173130520         | 3-173130520