忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

MySQL 文字列の前後に指定桁数分の追加文字列を追加する方法について(LPAD、RPAD)

表示したい文字列の前後に何かの文字列を追加したい場合はたまにあると思います。 例えば、空白を埋めたりする場合です。

MySQL では文字列の先頭から追加する方法として LPAD 関数、後ろから追加する関数として RPAD があります。
なお、これらの関数はマルチバイトセーフです。

LPADRPAD 関数の説明は以下の通りです。

■[LPAD、RPAD関数]の説明

LPAD(str, len, padstr)
-- str    : 対象文字列(str が len よりも長い場合は、戻り値は len 文字に短縮されます。)
-- len    : 最終的な文字列の長さ
-- padstr : 先頭から追加(パディング)する文字列

RPAD(str,len,padstr)
-- str    : 対象文字列(str が len よりも長い場合は、戻り値は len 文字に短縮されます。)
-- len    : 最終的な文字列の長さ
-- padstr : 右に追加(パディング)する文字列


それでは順次、FORMAT 関数の使用例を示します。

■[LPAD、RPAD関数]の例

MariaDB [(none)]> SELECT
    ->     LPAD('123', 5, '**')
    ->    ,LPAD('123', 2, '**')
    ->    ,RPAD('123', 5, '*')
    ->    ,RPAD('123', 2, '*')
    ->    ,RPAD('', 10, '*')
    -> ;
+----------------------+----------------------+---------------------+---------------------+-------------------+
| LPAD('123', 5, '**') | LPAD('123', 2, '**') | RPAD('123', 5, '*') | RPAD('123', 2, '*') | RPAD('', 10, '*') |
+----------------------+----------------------+---------------------+---------------------+-------------------+
| **123                | 12                   | 123**               | 12                  | **********        |
+----------------------+----------------------+---------------------+---------------------+-------------------+
1 row in set (0.00 sec)

最初の例では先頭から「**」が追加されていますが、 2番目の例では対象文字列が指定文字列長より短いので、先頭から文字列長分しか表示されません。
3番目の例では後ろから「**」が追加されていますが、 4番目の例では対象文字列が指定文字列長より短いので、先頭から文字列長分しか表示されません。

なお、対象文字列を空文字列にしてパディングを行うと、指定文字分の繰り返しが可能になります。 (そこまで必要性はありませんが)

それでは、マルチバイトセーフの例を示します。 (上記の例の文字列をマルチバイトに変更して実行)

MariaDB [(none)]> SELECT
    ->     LPAD('123', 5, '**')
    ->    ,LPAD('123', 2, '**')
    ->    ,RPAD('123', 5, '*')
    ->    ,RPAD('123', 2, '*')
    ->    ,RPAD('', 10, '*')
    -> ;
+---------------------------+---------------------------+-------------------------+-------------------------+----------------------+
| LPAD('123', 5, '**') | LPAD('123', 2, '**') | RPAD('123', 5, '*') | RPAD('123', 2, '*') | RPAD('', 10, '*')   |
+---------------------------+---------------------------+-------------------------+-------------------------+----------------------+
| **123                | 12                      | 123**              | 12                    | ********** |
+---------------------------+---------------------------+-------------------------+-------------------------+----------------------+
1 row in set (0.01 sec)











PR

コメント

コメントを書く