web-dev-qa-db-ja.com

Oracleは文字列の内側の空白を削除します

私はシステムにVARCHAR2として電話番号を保存しています。ユーザーが選択した場合、ユーザーが自分の電話番号の前に「+」文字を入力できるようにしています。

私の正規表現はこれを完全に可能にしますが、データベースに数値を格納するときに、ユーザーが入力する可能性のあるすべての空白を取り除きたいです。

私の正規表現は次のフォーマットを許可します

+4470123456789
+447 0123456789
+447 01234 56789
01234567890
01234 567890
01234 567 890

ユーザーが数字に空白を入れないようにすることで問題を解決できることはわかっていますが、個人的な経験から、クライアント側でのばかげたフォーマットが原因で検証エラーが発生するのはいらいらすることです。 INSERT/UPDATEトリガーでTRIM関数を使用してみましたが、それが前後の空白のみに限定されていることに気付きました。Oracleで他の関数を使用して、内部の空白を削除できますか?または、これを行うには独自の関数を記述する必要がありますか?

どんなポインタでも大歓迎です。

11
Alex

replace (telno, ' ', '')を試してみたいと思います。

36

より良いアプローチは、正規表現を使用して文字列内のすべてのスペースを削除することです

SQL> with t as (
    select 'AAA    BBB CCC' col from dual union
    select 'DDDD EEE     F' col from dual 
    )
    --
    -- actual query:
    --
    select regexp_replace(col, '[[:space:]]+', chr(32)) col
    from   t;

COL

AAA BBB CCC DDDD EEE F

0
Sarfraz Ahmed