V SQL LPAD()
je běžně používaná funkce, která doplní levou část řetězce zadaným znakem. Funkci lze použít pro řetězce a čísla, i když v závislosti na DBMS může být nutné předat čísla jako řetězec, než je lze doplnit.
DBMS, které mají LPAD()
funkce zahrnují MySQL, MariaDB, PostgreSQL a Oracle.
DBMS, které nedělají mít LPAD()
funkce zahrnují SQL Server a SQLite (ačkoli existují jiné způsoby, jak v těchto DBMS použít výplň vlevo).
Příklad
Zde je příklad, který ukazuje, jak používat LPAD()
ve vašem kódu SQL:
SELECT LPAD('Look Left', 20);
Výsledek:
+-----------------------+ | LPAD('Look Left', 20) | +-----------------------+ | Look Left | +-----------------------+
V tomto příkladu je levá část řetězce doplněna mezerou (výchozí znak pro vyplnění) a výsledný řetězec je dlouhý 20 znaků (protože jsem zadal 20
jako druhý argument).
Oracle funguje stejně, ale musíme použít FROM DUAL
když děláte dotaz, jako je tento (bez dotazu na skutečnou tabulku):
SELECT LPAD('Look Left', 20)
FROM DUAL;
Výsledek:
LPAD('LOOKLEFT',20) _______________________ Look Left
Určení znaku výplně
Polstrování nemusí být nutně prostorem. Volitelně můžeme přidat třetí argument, který specifikuje znak (nebo znaky), který se má použít v odsazení.
SELECT LPAD('7', 3, '0');
Výsledek:
007
V tomto případě jsem číslo doplnil nulami. Ve skutečnosti jsem v tomto příkladu předal číslo jako řetězec.
V některých systémech DBMS (jako je MariaDB a MySQL) můžeme číslo předat jako číslo a také jako číslo, kterým jej doplníme:
SELECT LPAD(7, 3, 0);
Výsledek:
007
Můžeme to udělat také v Oracle:
SELECT LPAD(7, 3, 0)
FROM DUAL;
Výsledek:
007
Ale PostgreSQL má s tímto problém:
SELECT LPAD(7, 3, 0);
Výsledek:
ERROR: function lpad(integer, integer, integer) does not exist
SQL Server
SQL Server nemá LPAD()
funkce, ale má FORMAT()
funkce, která nám umožňuje doplnit čísla úvodními nulami:
SELECT FORMAT(7, '000');
Výsledek:
007
Funguje to tak, že předáme číslo a za ním formátovací řetězec. Ve výše uvedeném příkladu je formátovací řetězec 000
. Toto je řetězec vlastního číselného formátu, jehož výsledkem je doplnění původního čísla tak, aby výsledek sestával ze tří číslic. Pokud původní číslo již neobsahuje tři číslice, je doplněno nulami.
S řetězci levého bloku v SQL Serveru můžeme udělat něco takového:
SELECT RIGHT('.......' + 'Cat', 7);
Výsledek:
....Cat
V SQL Server je také několik dalších ekvivalentů LPAD().