$ man lpad
LPAD / RPAD
文字列関数指定した長さになるまで、左(LPAD)や右(RPAD)を埋める。長すぎると切り捨てられる。
呼び出しの形
LPAD(文字列, 長さ) LPAD(文字列, 長さ, 埋める文字) RPAD(文字列, 長さ, 埋める文字)
つまずきやすいところ
元が長いと切り捨てられます。 桁をそろえるつもりが、データが欠けます。長いデータが来ないことを確かめてから使ってください。
数値をそのまま渡せません。
値::textやCAST(値 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_id | zero_zume | migi_zume |
|---|---|---|
| 1001 | 00001001 | 1001.... |
| 1002 | 00001002 | 1002.... |
| 1003 | 00001003 | 1003.... |
| 1004 | 00001004 | 1004.... |
| 1005 | 00001005 | 1005.... |
| 1006 | 00001006 | 1006.... |
| 1007 | 00001007 | 1007.... |
| 1008 | 00001008 | 1008.... |
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_name | moji | naga_sugiru_to |
|---|---|---|
| ノート | 3 | ノート |
| ボールペン | 5 | ボール |
| 付箋 | 2 | *付箋 |
| デスクチェア | 6 | デスク |
| 書棚 | 2 | *書棚 |
| デスクライト | 6 | デスク |
| キーボード | 5 | キーボ |
7 行
3 文字より長い商品名は、埋めるどころか 3 文字に切られます。
説明
LPAD は左を、RPAD は右を埋めて、指定した長さちょうどにします。伝票番号を 0001 のようにゼロ詰めするのによく使います。
⚠️ 元の文字列が指定した長さより長いと、埋めるどころか切り捨てられます。「桁をそろえる」つもりで書いたコードが、想定より長いデータで静かに欠ける——これがいちばん怖い挙動です。切りたくないなら、GREATEST(LENGTH(値), 桁数) のように長さを決めるか、事前に長さを検査してください。
埋める文字を省略すると半角空白になります。複数文字を指定すると、その並びを繰り返して埋めます。
次に読む
使い方を順に読むなら
根拠にした一次情報
- PostgreSQL 18 マニュアル: 文字列関数と演算子(2026-09-02 確認)