Některé DBMS mají LPAD()
a RPAD()
funkce, kterou lze použít k doplnění čísel úvodními a koncovými nulami.
SQL Server takovou funkci nemá. To nám ale nebrání v tom, abychom čísla mohli doplňovat nulami na začátku/na konci.
Necelá čísla
Nejprve se podívejme na necelá čísla:
SELECT
FORMAT(7, '000.00') AS "1",
FORMAT(17, '000.00') AS "2",
FORMAT(73.5, '000.00') AS "3";
Výsledek:
+--------+--------+--------+ | 1 | 2 | 3 | |--------+--------+--------| | 007.00 | 017.00 | 073.50 | +--------+--------+--------+
Zde používáme FORMAT()
funkce pro formátování čísla. První argument je číslo a druhý argument je formátovací řetězec. Funkce vydá svůj výsledek jako formátovaný řetězec.
Ve výše uvedeném příkladu se formátovací řetězec skládá z vlastních číselných specifikátorů formátu, což vede k tomu, že původní číslo má nuly na místech, kde v původním čísle není žádná číslice. Ve formátovacím řetězci můžeme použít tolik nul, kolik potřebujeme.
SELECT
FORMAT(7, '00000.0000') AS "1",
FORMAT(17, '00000.0000') AS "2",
FORMAT(73.5, '00000.0000') AS "3";
Výsledek:
+------------+------------+------------+ | 1 | 2 | 3 | |------------+------------+------------| | 00007.0000 | 00017.0000 | 00073.5000 | +------------+------------+------------+
Celá čísla
Pokud je původní číslo celé číslo, pak musíme udělat trochu více práce:
SELECT
REPLACE(FORMAT(7, '00000.0000', 'en-US'), '.', '') AS "1",
REPLACE(FORMAT(17, '00000.0000', 'en-US'), '.', '') AS "2",
REPLACE(FORMAT(73.5, '00000.0000', 'en-US'), '.', '') AS "3";
Výsledek:
+-----------+-----------+-----------+ | 1 | 2 | 3 | |-----------+-----------+-----------| | 000070000 | 000170000 | 000735000 | +-----------+-----------+-----------+
Zde jsem použil REPLACE()
funkce k odstranění desetinné čárky poté, co bylo číslo naformátováno.
Explicitně jsem použil en-US
jako (nepovinný) třetí argument, který zajistí, že oddělovač desetinných míst je tečka/tečka a ne jiný znak, jako je čárka. Některá národní prostředí používají jako oddělovač desetinných míst čárku. Pokud explicitně neurčíme národní prostředí z funkce, použije se národní prostředí aktuální relace. Explicitní zadání národního prostředí v rámci funkce zajišťuje, že není použito národní prostředí aktuální relace, a proto nemůže zasahovat do naší operace nahrazení.
Azure SQL Edge
Azure SQL Edge je postaven na omezené implementaci databázového stroje SQL Server, a proto podporuje většinu funkcí T-SQL, které můžeme s SQL Serverem používat. V době psaní tohoto článku však SQL Edge nepodporuje T-SQL FORMAT()
funkce.
Alternativní metodu (která funguje také na SQL Serveru) najdete v tématu Jak přidat počáteční a koncové nuly v Azure SQL Edge.