MySQLのRPAD関数の使い方!文字列を右側から指定文字で埋める

MySQL

MySQLのRPAD関数は、指定した文字列を右側から特定の文字で埋め、指定された長さにするために使用されます。

データの整形、固定長フィールドの生成、レポートの見栄え調整など、文字列の長さを揃えたい場合に非常に役立ちます。
この記事では、RPAD関数の基本的な使い方、埋める文字の指定、長さの制御、そして使用する際の注意点について解説します。

RPAD関数の基本的な構文

RPAD関数の基本的な構文は以下の通りです。

RPAD(string, length, pad_string)
  • string: パディング(埋め込み)を行いたい元の文字列。カラム名、文字列リテラル、または他の関数から返される文字列を指定できます。
  • length: 結果として得られる文字列の全体の長さ(文字数)を指定する正の整数。
  • pad_string: string の右側を埋めるために使用する文字または文字列。通常は1文字を指定しますが、複数文字も可能です。

この関数は、stringの右側にpad_stringを繰り返し追加し、lengthで指定された長さになるように調整した文字列を返します。

RPAD関数の使用例

いくつか具体的な例を見てみましょう。

例1:基本的なパディング(1文字で埋める)

SELECT RPAD('abc', 5, '*');
-- 結果: 'abc**'

この例では、’abc’の右側に’*’を2つ追加し、長さ5の文字列にしています。

例2:指定した文字が複数文字の場合

pad_stringに複数文字を指定した場合、それが繰り返し使われます。

SELECT RPAD('data', 10, '-_');
-- 結果: 'data-_-_-_'

この例では、pad_string が ‘-_’ なので、これらが繰り返されて埋められます。

例3:元の文字列が length よりも長い場合

元の文字列(string)が全体の文字数(length)よりも長い場合、元の文字列(string)は全体の文字数(length)で指定された長さに切り詰められます

SELECT RPAD('LongString', 5, '-');
-- 結果: 'LongS'

この場合、埋める処理は行われず、文字列が短縮されます。

例4:カラムからの抽出と整形

products テーブルに product_codeカラムがあり、これを固定長10文字で表示したい場合です。

SELECT product_code, RPAD(product_code, 10, '#') AS formatted_code
FROM products
WHERE product_id = 101;
-- 例: product_code が 'XYZ-001' の場合 -> 'XYZ-001###'

例5:日本語(マルチバイト文字)の扱い

MySQLのデフォルトの文字セット(UTF-8など)では、RPAD関数は文字数単位で処理されます。

SELECT RPAD('テスト', 6, '。');
-- 結果: 'テスト。。'

RPAD関数における長さ指定の注意点

  • length は正の整数: length には正の整数を指定する必要があります。負の値を指定すると、結果はNULLになります。
  • length が 0 の場合: 結果は空の文字列になります。
  • string または pad_stringNULL の場合:
    いずれかの引数が NULL の場合、結果は NULL になります。
SELECT RPAD('abc', 5, NULL); -- 結果: NULL
SELECT RPAD(NULL, 5, '*');   -- 結果: NULL

RPAD関数の応用的な使用例

RPAD関数は、他の文字列関数と組み合わせて、より複雑なデータ操作を行うことができます。

例1:数値データを文字列に変換してパディング

sales テーブルの amount カラムを固定長で表示したい場合(例: ‘00123.50’ のような形式)。

SELECT LPAD(FORMAT(amount, 2), 10, '0') AS formatted_amount
FROM sales
WHERE sale_id = 50;
-- RPADと類似しますが、数値の左側をゼロ埋めする一般的な手法です
-- もし小数部分の後ろをゼロ埋めしたい場合はRPADが使えます
-- 例: '123.5' を '123.500' のようにしたい場合
SELECT RPAD('123.5', 7, '0'); -- 結果: '123.500'

補足:数値の整形にはFORMAT関数やLPAD(左パディング)もよく使われます。RPADは主に文字列の右側を埋める際に使います。

例2:ハッシュ値の表示(部分的にマスク)

セキュリティ目的でハッシュ値の一部をマスクし、残りの部分をパディングで埋めるような場合です。

SELECT RPAD(LEFT(user_hash, 8), 20, '*') AS masked_hash
FROM users
WHERE user_id = 1;
-- 例: user_hash が 'abcdef1234567890abcdef' の場合
-- 結果: 'abcdef12************'

RPAD関数を使う際の注意点

  • 文字セットと照合順序: MySQLの文字セット(特にUTF-8などのマルチバイト文字セット)と照合順序の設定によって、文字の扱いが異なる場合があります。通常の文字セットでは文字単位で処理されますが、utf8mb4_binなどのバイナリ照合順序ではバイト単位となる点に注意してください。
  • LPADとの違い: RPADは右側から埋めるのに対し、LPADは左側から埋めます。用途に応じて使い分けましょう。
  • 固定長フィールドの出力: レポート作成などで、特定のカラムの値を常に同じ長さにしたい場合に非常に便利です。

まとめ

MySQLのRPAD関数は、文字列の右側を指定した文字で埋め、特定の長さに整形できる便利な関数です。
データの表示整形、レポートの可読性向上、固定長データの作成など、様々な場面で活躍します。

lengthパラメータの挙動、pad_stringの指定方法、そしてLPADとの違いを理解して、SQLクエリをより柔軟かつ効果的に記述しましょう。

コメント