コマンド道場

$ man lpad

LPAD / RPAD

文字列関数

指定した長さになるまで、左(LPAD)や右(RPAD)を埋める。長すぎると切り捨てられる。

呼び出しの形

LPAD(文字列, 長さ)
LPAD(文字列, 長さ, 埋める文字)
RPAD(文字列, 長さ, 埋める文字)

つまずきやすいところ

  • 元が長いと切り捨てられます。 桁をそろえるつもりが、データが欠けます。長いデータが来ないことを確かめてから使ってください。

  • 数値をそのまま渡せません。値::textCAST(値 AS text) で文字列にしてから渡します。

  • 埋める文字を省略すると半角空白です。ゼロ詰めしたいなら明示してください。

実行例

結果は実際に流したものです。同じ SQL を 自由に打てる画面 で試すと、同じ結果になります。

ゼロ詰めで桁をそろえる
SELECT juchu_id, LPAD(juchu_id::text, 8, '0') AS zero_zume, RPAD(juchu_id::text, 8, '.') AS migi_zume FROM juchu ORDER BY juchu_id
juchu_idzero_zumemigi_zume
1001000010011001....
1002000010021002....
1003000010031003....
1004000010041004....
1005000010051005....
1006000010061006....
1007000010071007....
1008000010081008....

10(うち 8 行を表示)

長すぎると切り捨てられる
SELECT shohin_name, LENGTH(shohin_name) AS moji, LPAD(shohin_name, 3, '*') AS naga_sugiru_to FROM shohin ORDER BY shohin_id
shohin_namemojinaga_sugiru_to
ノート3ノート
ボールペン5ボール
付箋2*付箋
デスクチェア6デスク
書棚2*書棚
デスクライト6デスク
キーボード5キーボ

7

3 文字より長い商品名は、埋めるどころか 3 文字に切られます。

説明

LPAD は左を、RPAD は右を埋めて、指定した長さちょうどにします。伝票番号を 0001 のようにゼロ詰めするのによく使います。

⚠️ 元の文字列が指定した長さより長いと、埋めるどころか切り捨てられます。「桁をそろえる」つもりで書いたコードが、想定より長いデータで静かに欠ける——これがいちばん怖い挙動です。切りたくないなら、GREATEST(LENGTH(値), 桁数) のように長さを決めるか、事前に長さを検査してください。

埋める文字を省略すると半角空白になります。複数文字を指定すると、その並びを繰り返して埋めます。

次に読む

根拠にした一次情報