代码之家  ›  专栏  ›  技术社区  ›  chris

Oracle:替换字符串中的非数字字符

  •  26
  • chris  · 技术社区  · 14 年前

    我的数据库中有一个字段,用户可以在其中保存免费电话号码。因此,数据具有各种不同的格式:

    • (区域)nnn nnnn
    • 区域nnn.nnnn

    2 回复  |  直到 9 年前
        1
  •  57
  •   Álvaro González    11 年前

    你可以用 REGEXP_REPLACE

    SELECT REGEXP_REPLACE('+34 (947) 123 456 ext. 2013', '[^0-9]+', '')
    FROM DUAL
    

    此示例返回 349471234562013 .

    替代语法包括:

    • '[^[:digit:]]+'
      
    • 受Perl影响的扩展(自Oracle 11以来):

      '\D+'
      
        2
  •  12
  •   Tony Andrews    14 年前

    对于不支持正则表达式的旧版本Oracle:

    select translate (phone_no,'0'||translate (phone_no,'x0123456789','x'),'0')
    from mytable;
    

    内在的 translate 从电话号码和外部 翻译