LPAD() и RPAD() в SQL — выравнивание и дополнение строки до заданной длины

LPAD(str, len, fill) дополняет строку слева символами fill до общей длины len, а RPAD — справа. Аналитику это нужно для ведущих нулей в кодах заказов, выравнивания и маскировки данных. Функции есть в PostgreSQL и MySQL; в SQLite их нет — для нулей слева обычно берут printf('%06d', x).

Синтаксис

LPAD(строка, длина, чем_заполнять) RPAD(строка, длина, чем_заполнять)

Примеры использования

Пример 1: Ведущие нули в коде заказа

SELECT order_id,
       LPAD(order_id::text, 6, '0') AS order_code
FROM orders
LIMIT 3;

Результат:

order_id | order_code
42       | 000042
1337     | 001337

Пример 2: Маскировка карты — видны последние 4 цифры

SELECT LPAD(RIGHT(card_number, 4), 16, '*') AS masked
FROM payments
LIMIT 3;

Результат:

masked
************4242
************0000

Пример 3: RPAD для выравнивания названия точками

SELECT RPAD(name, 12, '.') AS label
FROM products
LIMIT 3;

Результат:

label
Молоко......
Хлеб........
Порешать SQL-задачи в тренажёре →

Типичная ошибка

Если исходная строка длиннее len, она обрезается до этой длины — а не остаётся как есть, это частая ловушка. NULL на входе даёт NULL. Длина считается в символах: для многобайтовых строк это важно. В SQLite встроенных LPAD/RPAD нет.

Где спрашивают на собеседовании

Спрашивают в задачах на форматирование кодов и маскировку — часто в связке с RIGHT/LEFT и конкатенацией (||, CONCAT).

FAQ: частые вопросы про LPAD

Что будет, если строка длиннее указанной длины?

LPAD и RPAD обрежут строку до заданной длины, а не оставят её целиком. Например, LPAD('123456', 4, '0') вернёт '1234'. Поэтому len выбирают заведомо не меньше самой длинной ожидаемой строки.

Есть ли LPAD в SQLite?

Встроенной функции LPAD в SQLite нет. Для ведущих нулей используют printf('%06d', order_id), а для произвольного заполнителя — конструкции на substr и повторении символов. В PostgreSQL и MySQL LPAD/RPAD работают напрямую.

Зачем LPAD аналитику на практике?

Чаще всего — ведущие нули для кодов и идентификаторов (000042), чтобы они одинаково сортировались и красиво выглядели в выгрузках. Ещё это маскировка чувствительных данных (звёздочки вместо цифр карты) и выравнивание колонок в текстовых отчётах.

Смежные темы SQL

Строковые функции

Другие функции SQL

SUBSTR · CONCAT · REPLACE · TRIM · UPPER / LOWER · LENGTH

Открыть SQL-тренажёр (565 задач) →