Některé RDBMS poskytují LPAD()
a RPAD()
funkce, která nám umožňuje padat doleva nebo doprava na strunu. Některé funkce nám také umožňují přidávat počáteční nebo koncová čísla nul.
Níže jsou uvedeny příklady použití výplně SQL v některých populárnějších RDBMS.
Oracle
Oracle nám poskytuje LPAD()
a RPAD()
speciálně pro odsazení levé nebo pravé části řetězce:
SELECT LPAD('Cat', 20)
FROM DUAL;
Výsledek:
LPAD('CAT',20) _______________________ Cat
V tomto případě jsem použil LPAD()
pro použití levého odsazení a výsledný řetězec má 20 znaků, protože to je to, co jsem použil pro druhý argument.
Výsledek je doplněn mezerou, protože to je výchozí znak používaný pro vyplnění. Pokud neurčíte, kterým znakem se má řetězec vyplnit, použije se mezera.
Můžete přidat třetí znak a určit, který znak se má použít pro výplň:
SELECT LPAD('7', 3, '0')
FROM DUAL;
Výsledek:
LPAD('7',3,'0') __________________ 007
V tomto případě jsem číslo doplnil nulami (i když výsledkem je řetězec).
Oracle má také TO_CHAR(number)
funkce, kterou lze použít k přidání úvodních nul k číslu:
SELECT TO_CHAR(7, 'fm000')
FROM DUAL;
Výsledek:
007
0
formátovací prvek představuje každou číslici v původním čísle a nulu, pokud na této pozici v původním čísle žádná číslice neexistuje.
PostgreSQL
PostgreSQL má také svůj vlastní LPAD()
a RPAD()
funkce:
SELECT
LPAD('7', 3, '0') AS "Left Padding",
RPAD('7', 3, '0') AS "Right Padding",
LPAD(RPAD('7', 3, '0'), 5, '0') AS "Both";
Výsledek:
Left Padding | Right Padding | Both --------------+---------------+------- 007 | 700 | 00700
A má také svůj vlastní TO_CHAR()
funkce, která funguje podobně jako stejnojmenná funkce Oracle:
SELECT TO_CHAR(7, 'fm000');
Výsledek:
007
MariaDB
MariaDB má svůj vlastní LPAD()
a RPAD()
funkce:
SELECT
LPAD('7', 3, '0') AS "Left Padding",
RPAD('7', 3, '0') AS "Right Padding",
LPAD(RPAD('7', 3, '0'), 5, '0') AS "Both";
Výsledek:
+--------------+---------------+-------+ | Left Padding | Right Padding | Both | +--------------+---------------+-------+ | 007 | 700 | 00700 | +--------------+---------------+-------+
A zatímco MariaDB má svůj vlastní TO_CHAR()
funkce, nepracuje s čísly (je omezena na hodnoty data a času).
MySQL
MySQL má také svůj vlastní LPAD()
a RPAD()
funkce.
Zde je příklad použití LPAD()
proti sloupci databáze:
SELECT Genre, LPAD(Genre, 10, '.')
FROM Genres;
Výsledek:
+---------+----------------------+ | Genre | LPAD(Genre, 10, '.') | +---------+----------------------+ | Rock | ......Rock | | Jazz | ......Jazz | | Country | ...Country | | Pop | .......Pop | | Blues | .....Blues | | Hip Hop | ...Hip Hop | | Rap | .......Rap | | Punk | ......Punk | +---------+----------------------+
SQL Server
SQL Server je trochu anomálie v tom, že nemá LPAD()
nebo RPAD()
funkce.
SQL Server však má FORMAT()
funkce, která nám umožňuje snadno doplňovat čísla úvodními nulami:
SELECT FORMAT(7, '000');
Výsledek:
007
Druhým argumentem je řetězec vlastního číselného formátu, který určuje, kolik znaků bude mít výsledný řetězec. Skutečnost, že jsem použil nuly, znamená, že výsledek bude mít v případě potřeby úvodní nuly.
K vyplnění řetězců na SQL Serveru můžeme udělat něco takového:
SELECT RIGHT('.......' + 'Cat', 7);
Výsledek:
....Cat
Existují různé další techniky, které můžeme použít pro aplikaci odsazení na SQL Server.