This is my pen. の連続した半角スペースを、一つに置換する。 最大で20個の半角スペースが連続する。 置換後の文字列 This is my pen.
--■■■正規表現を使用する方法(10g以降)■■■ select RegExp_Replace('This is my pen.',' {2,}',' ') from dual; --■■■Replace関数を使用する方法1■■■ select replace( replace( replace('This is my pen.' ,' ',' ' || '禁則文字') ,'禁則文字' || ' ') ,'禁則文字') from dual; --■■■Replace関数を使用する方法2■■■ select Replace( Replace( Replace( Replace( Replace('This is my pen.',' ',' '), ' ',' '), ' ',' '), ' ',' '), ' ',' ') from dual;
Replace関数を使用する方法2では、 最大で20個の半角スペースが連続するので、 Replace関数で、 Log2の20(約4.32)の小数を切り上げた数の回数分(5回)、空白2文字を1文字に置換してます。 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ Replace関数を使用する方法1についての考察 case1 AAAAAAAAAAAAAAAAAAAAAAAAA replace AA to AB ABABABABABABABABABABABABA remove BA A remove B A case2 AAAAAAAAAAAAAAAAAAAAAAAA replace AA to AB ABABABABABABABABABABABAB remove BA AB remove B A case3 A replace AA to AB A remove BA A remove B A case4 AA replace AA to AB AB remove BA AB remove B A Replace multiple whitespaces in a string with single one