[ Oracle SQL ] 文字列の前後のスペースの除去と挿入 ( Trim, Padding )

Pocket

多くのプログラム言語では文字列の前後のスペースを除去するための trim 関数が用意されていますが、 Oracle にも trim 関数が用意されています。また、文字列の前後にスペースや 0 などをパディングして桁数を揃える lpad, rpad 関数も用意されています。ここでは、それらの使用例を掲載しています。

スポンサーリンク

文字列の前後のスペースを除去 ( trim, ltrim, rtrim )

select trim(' string ')  from dual  // 前後の半角スペースを除去する
//-----------------------
// 'string'

select ltrim(' string ') from dual  // 先行の半角スペースを除去する
//-----------------------
// 'string '

select rtrim(' string ') from dual  // 後続の半角スペースを除去する
//-----------------------
// ' string'

任意の文字を除去 ( BOTH, LEADING, TRAILING )

trim, ltrim, rtrim 関数は半角スペースを除去しますが、BOTH, LEADING, TRAILING を指定することで任意の文字も除去することができます。以下は、table1 テーブルの name カラムから取得した文字列の前後(あるいは両方)の文字 ‘ 0 ‘ を除去する例になります。

// 文字列 '0000masao0000' が取得されると仮定する

select trim(BOTH '0' from name) from table1;     // 前後の文字 '0' を除去する
//-----------------------
// 'masao'

select trim(LEADING '0' from name) from table1;  // 先行の文字 '0' を除去する
//-----------------------
// 'masao0000'

select trim(TRAILING '0' from name) from table1; // 後続の文字 '0' を除去する
//-----------------------
// '0000masao'

point !

  • 除去する文字を省略した場合は、半角スペースが使用される
  • 修飾子(LEADING など)を省略した場合は、BOTH がデフォルトで使用される
  • 半角スペースと全角スペースは異なる文字として扱われる

文字列の前後に文字を挿入 ( パディング )

文字列の前後にパディングを入れるには lpad, rpad 関数を使用できます。 例えば、10桁に満たない文字列の前にスペースや 0 をパディング(挿入)して桁数をそれたい場合などに使用することが多いと思います。

// 文字列 '22' の前に '0' のパディングを入れ、トータル 10 文字で返す
select lpad('22', 10, '0') from dual;

// 結果
//---------------------------------------------
// lpad('22', 10, '0')
// ----------
// 0000000022

// 文字列 '22' の前に半角スペースのパディングを入れ、トータル 10 文字で返す
select lpad('22', 10, ' ') from dual;

// 結果
//---------------------------------------------
// lpad('22', 10, ' ')
// ----------
//         22

上記サンプルは lpad 関数のみ掲載していますが、文字列の後に文字を追加したい場合は rpad 関数を使用します。

実は、パディングは1文字である必要はありません。 文字列をパディングとして指定することもできます。パディング文字列が指定した桁数に達するまで繰り返し付加されます。

// 後続にパディング 'abcde' を入れ、トータル 30 文字で返す。
select rpad('xyz', 30, 'abcde') from dual;

// 結果
//---------------------------------------------
// RPAD('XYZ',30,'ABCDE')
// ------------------------------
// xyzabcdeabcdeabcdeabcdeabcdeab

使いどころがイメージできていません。使用された方、教えてもらえるとうれしいです

参考
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *