SELECT order_id,
LPAD(order_id::text, 6, '0') AS order_code
FROM orders
LIMIT 3;
Результат:
order_id | order_code 42 | 000042 1337 | 001337
SELECT LPAD(RIGHT(card_number, 4), 16, '*') AS masked
FROM payments
LIMIT 3;
Результат:
masked ************4242 ************0000
SELECT RPAD(name, 12, '.') AS label
FROM products
LIMIT 3;
Результат:
label Молоко...... Хлеб........Порешать SQL-задачи в тренажёре →
Спрашивают в задачах на форматирование кодов и маскировку — часто в связке с RIGHT/LEFT и конкатенацией (||, CONCAT).
LPAD и RPAD обрежут строку до заданной длины, а не оставят её целиком. Например, LPAD('123456', 4, '0') вернёт '1234'. Поэтому len выбирают заведомо не меньше самой длинной ожидаемой строки.
Встроенной функции LPAD в SQLite нет. Для ведущих нулей используют printf('%06d', order_id), а для произвольного заполнителя — конструкции на substr и повторении символов. В PostgreSQL и MySQL LPAD/RPAD работают напрямую.
Чаще всего — ведущие нули для кодов и идентификаторов (000042), чтобы они одинаково сортировались и красиво выглядели в выгрузках. Ещё это маскировка чувствительных данных (звёздочки вместо цифр карты) и выравнивание колонок в текстовых отчётах.
SUBSTR · CONCAT · REPLACE · TRIM · UPPER / LOWER · LENGTH
Открыть SQL-тренажёр (565 задач) →