Някои RDBMS предоставят LPAD()
и RPAD()
функция, която ни позволява да допълним низ или десен тампон. Някои функции също ни позволяват да добавяме начални или крайни нули числа.
По-долу са дадени примери за прилагане на SQL padding в някои от по-популярните RDBMS.
Оракул
Oracle ни предоставя LPAD()
и RPAD()
специално за допълване на лявата или дясната част на низ:
SELECT LPAD('Cat', 20)
FROM DUAL;
Резултат:
LPAD('CAT',20) _______________________ Cat
В този случай използвах LPAD()
за да приложите ляв допълване и полученият низ е 20 знака, защото това използвах за втория аргумент.
Резултатът се допълва с интервал, защото това е символът по подразбиране, използван за допълване. Ако не посочите с кой знак да подпълните низа, се използва интервал.
Можете да добавите трети знак, за да посочите кой знак да използвате за допълването:
SELECT LPAD('7', 3, '0')
FROM DUAL;
Резултат:
LPAD('7',3,'0') __________________ 007
В този случай допълних число с нули (въпреки че резултатът е низ).
Oracle също има TO_CHAR(number)
функция, която може да се използва за добавяне на водещи нули към число:
SELECT TO_CHAR(7, 'fm000')
FROM DUAL;
Резултат:
007
0
Елементът format представлява всяка цифра в оригиналното число и нула, ако не съществува цифра на тази позиция в оригиналното число.
PostgreSQL
PostgreSQL също има свой собствен LPAD()
и RPAD()
функции:
SELECT
LPAD('7', 3, '0') AS "Left Padding",
RPAD('7', 3, '0') AS "Right Padding",
LPAD(RPAD('7', 3, '0'), 5, '0') AS "Both";
Резултат:
Left Padding | Right Padding | Both --------------+---------------+------- 007 | 700 | 00700
Освен това има свой собствен TO_CHAR()
функция, която работи подобно на едноименната функция на Oracle:
SELECT TO_CHAR(7, 'fm000');
Резултат:
007
MariaDB
MariaDB има свой собствен LPAD()
и RPAD()
функции:
SELECT
LPAD('7', 3, '0') AS "Left Padding",
RPAD('7', 3, '0') AS "Right Padding",
LPAD(RPAD('7', 3, '0'), 5, '0') AS "Both";
Резултат:
+--------------+---------------+-------+ | Left Padding | Right Padding | Both | +--------------+---------------+-------+ | 007 | 700 | 00700 | +--------------+---------------+-------+
И докато MariaDB има свой собствен TO_CHAR()
функция, тя не работи върху числа (ограничена е до стойности за дата и час).
MySQL
MySQL също има свой собствен LPAD()
и RPAD()
функции.
Ето пример за използване на LPAD()
срещу колона от база данни:
SELECT Genre, LPAD(Genre, 10, '.')
FROM Genres;
Резултат:
+---------+----------------------+ | Genre | LPAD(Genre, 10, '.') | +---------+----------------------+ | Rock | ......Rock | | Jazz | ......Jazz | | Country | ...Country | | Pop | .......Pop | | Blues | .....Blues | | Hip Hop | ...Hip Hop | | Rap | .......Rap | | Punk | ......Punk | +---------+----------------------+
SQL сървър
SQL Server е малко аномалия, тъй като няма LPAD()
или RPAD()
функция.
Въпреки това SQL Server има FORMAT()
функция, която ни позволява лесно да добавяме числа с водещи нули:
SELECT FORMAT(7, '000');
Резултат:
007
Вторият аргумент е низ с персонализиран цифров формат, който определя колко знака ще има полученият низ. Фактът, че използвах нули, означава, че резултатът ще има водещи нули, ако е необходимо.
За да добавим низове в SQL Server, можем да направим нещо подобно:
SELECT RIGHT('.......' + 'Cat', 7);
Резултат:
....Cat
Има различни други техники, които можем да използваме за прилагане на запълване в SQL Server.