Pokud používáte Oracle Database nebo MySQL, máte to štěstí, že máte LPAD()
a RPAD()
funkce, které vám umožňují vyplnit řetězec daným znakem (nebo znaky) vlevo a/nebo vpravo.
SQL Server (nebo přesněji T-SQL) však tyto funkce neobsahuje. Pokud tedy potřebujete vycpávku vlevo, budete muset improvizovat.
Tento článek představuje čtyři možnosti pro odsazení čísla úvodními nulami na serveru SQL Server. Takže můžete dělat věci jako turn 7
do 007
. Tři z těchto možností fungují na řetězcích, takže můžete také použít výplň na textová data.
Metoda 1 – Použijte funkci FORMAT()
Pokud potřebujete na číslo použít úvodní nuly, pak by tato možnost měla být vše, co potřebujete. Tato možnost používá FORMAT()
funkce. Tato funkce vrací číslo jako řetězec v našem zadaném formátu:
SELECT FORMAT(7, '000');
Výsledek:
007
V tomto případě použijeme 0
specifikátor formátu pro formátování čísla s úvodními nulami tam, kde je to možné. Toto je jen jeden z mnoha vlastních specifikátorů formátu. Vlastní specifikátory formátu nám umožňují velmi přesně určit, jak je naše číslo formátováno.
Všimněte si, že FORMAT()
funkce je pouze pro čísla a hodnoty data a času. Pokud tedy potřebujete použít výplň na skutečný řetězec, čtěte dále.
Metoda 2 – Použijte funkci RIGHT()
Druhá metoda používá RIGHT()
funkce vrátí pouze pravou část řetězce po přidání několika úvodních nul.
Ačkoli zde na „číslo“ aplikuji úvodní nuly, je to ve skutečnosti řetězcová reprezentace čísla. Pokud tedy potřebujete použít výplň na řetězec namísto čísla, pak by tato metoda měla fungovat.
SELECT RIGHT('000' + '1234', 7);
Výsledek:
0001234
7
určuje, kolik znaků by měl mít konečný výsledek (po přidání nul).
Zkrácení délky
Pokud tedy toto číslo snížíme, sníží se počet úvodních nul:
SELECT RIGHT('000' + '1234', 6);
Výsledek:
001234
Zvětšení délky
Pokud však toto číslo zvýšíme, musíme se ujistit, že jsme zadali dostatek nul, abychom vytvořili požadovanou délku:
SELECT RIGHT('000000' + '1234', 10);
Výsledek:
0000001234
Jinak skončíme s tímto:
SELECT RIGHT('000' + '1234', 10);
Výsledek:
0001234
Zkrácení čísla
Všimněte si také, že pokud neurčíte dostatek znaků pro výslednou délku řetězce, číslo bude oříznuto a získáte pouze pravou část čísla:
SELECT RIGHT('000' + '1234', 2);
Výsledek:
34
Takže v tomto případě bylo počáteční číslo zkráceno plus úvodní nuly byly ignorovány.
Toto je jeden scénář, kde se výsledek liší od výsledku MySQL a Oracle LPAD()
funkce. Tato funkce by vytvořila první 2 (nevyplněné) číslice místo posledních 2 číslic. Takhle:
SELECT LPAD(1234, 2, 0);
Výsledek:
12
Pokud potřebujete řešení SQL Server, které se bude chovat jako LPAD()
v takových případech zkuste toto:
SELECT RIGHT(REPLICATE('0', 3) + LEFT('1234', 2), 2);
Výsledek:
12
Mějte však na paměti, že stejného výsledku získáte jednoduše pomocí LEFT()
funkce sama o sobě:
SELECT LEFT('1234', 2);
Výsledek:
12
Navíc se snažím vymyslet důvod, proč by někdo chtěl číslo zkrátit (vzhledem k tomu, že se ho snaží doplnit), ale alespoň tohle je něco, co je třeba zvážit.
Metoda 3 – použijte kombinaci RIGHT() a REPLICATE()
Tato metoda je téměř stejná jako předchozí metoda, pouze s tím rozdílem, že tři nuly jednoduše nahradím REPLICATE()
funkce:
SELECT RIGHT(REPLICATE('0', 3) + '1234', 7);
Výsledek:
0001234
REPLICATE()
Funkce vám ušetří nutnost zadávat každou nulu (nebo jiný znak) několikrát.
Bonusová metoda:Metoda 4 – Použijte kombinaci REPLACE() a STR()
Tato metoda pochází z úplně jiného úhlu než předchozí metody:
SELECT REPLACE(STR('1234', 6),' ','0');
Výsledek:
001234
Zde používáme REPLACE()
funkce ve spojení s STR()
funkci převést číslo na řetězec určité délky a poté převést libovolné znaky mezery na nulu.
Jedna věc, na kterou je třeba si dát pozor, je, že pokud číslo zkrátíte (jako jsme to udělali v předchozím příkladu), místo (zkráceného) čísla skončíte s řadou hvězdiček:
SELECT REPLACE(STR('1234', 2),' ','0');
Výsledek:
**