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_string
がNULL
の場合:
いずれかの引数が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クエリをより柔軟かつ効果的に記述しましょう。
コメント