4

Oracle の正規表現に問題があります。さまざまなテーブルにたくさんの電話番号があります。今の私の仕事はそれらを統一することです。だから私はすべての空白、アンダースコア、マイナスなどを取り除きます. しかし、それからトリッキーな部分が来ます - 最初はとても簡単に思えました.

0046812345678 と 0812345678 のように、国際コードの有無にかかわらず番号があります。そのため、1 つの先行ゼロ (!) を '0046' に置き換えたいと考えています。私はそれでうまくいくと思って^0(?=[1-9])いましたが、オラクルは先読みは役に立たないと考えているようです。 0812345678 を 004612345678 にするだけでなく、最初のゼロ以外の数字を置き換えるため (つまり、最初の '8' が消えます)、(^0)(1|2|3|4|5|6|7|8|9)どちらも (またはその点で) 仕事をしません。(^01|02|03|04|05|06|07|08|09)

私はかなり長い間検索して試してみましたが、これ以上の可能性を思いつくことはできません. どんな助けでも大歓迎です。前もって感謝します!

4

1 に答える 1

6

シングルで始まる数字のみ0が一致するように、最初の 1 ~ 9 を結果に追加する必要があります。最初の 1 ~ 9 を保持するために、(括弧を使用して) それをキャプチャし、( を使用して\1) 置換部分に追加します。これはうまくいくようです:

select regexp_replace('0812345678', '^0([1-9])', '0046\1') from dual;

結果: 0046812345678

于 2013-04-19T10:34:33.910 に答える