Niektóre DBMS mają funkcję LPAD()
i RPAD()
funkcja, która może być używana do uzupełniania liczb zerami wiodącymi i końcowymi.
SQL Server nie ma takiej funkcji. Ale to nie przeszkadza nam w uzupełnianiu liczb zerami wiodącymi/końcowymi.
Liczby niecałkowite
Najpierw spójrzmy na liczby niecałkowite:
SELECT
FORMAT(7, '000.00') AS "1",
FORMAT(17, '000.00') AS "2",
FORMAT(73.5, '000.00') AS "3";
Wynik:
+--------+--------+--------+ | 1 | 2 | 3 | |--------+--------+--------| | 007.00 | 017.00 | 073.50 | +--------+--------+--------+
Tutaj używamy FORMAT()
funkcja formatowania liczby. Pierwszym argumentem jest liczba, a drugim ciąg formatujący. Funkcja wyprowadza swój wynik jako sformatowany ciąg.
W powyższym przykładzie ciąg formatu składa się z niestandardowych specyfikatorów formatu liczbowego, które powodują, że oryginalna liczba ma dodane zera w miejscach, w których nie ma cyfry w oryginalnej liczbie. Możemy użyć tylu zer w ciągu formatu, ile potrzebujemy.
SELECT
FORMAT(7, '00000.0000') AS "1",
FORMAT(17, '00000.0000') AS "2",
FORMAT(73.5, '00000.0000') AS "3";
Wynik:
+------------+------------+------------+ | 1 | 2 | 3 | |------------+------------+------------| | 00007.0000 | 00017.0000 | 00073.5000 | +------------+------------+------------+
Liczby całkowite
Jeśli oryginalna liczba jest liczbą całkowitą, musimy wykonać trochę więcej pracy:
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";
Wynik:
+-----------+-----------+-----------+ | 1 | 2 | 3 | |-----------+-----------+-----------| | 000070000 | 000170000 | 000735000 | +-----------+-----------+-----------+
Tutaj użyłem REPLACE()
funkcja usuwania kropki dziesiętnej po sformatowaniu liczby.
Ja jawnie użyłem en-US
jako (opcjonalny) trzeci argument, aby zapewnić, że separatorem dziesiętnym jest kropka/kropka, a nie inny znak, taki jak przecinek. Niektóre ustawienia regionalne używają przecinka jako separatora dziesiętnego. Jeśli nie określimy wprost lokalizacji z poziomu funkcji, używane są ustawienia regionalne bieżącej sesji. Jawne określenie ustawień regionalnych z poziomu funkcji zapewnia, że ustawienia regionalne bieżącej sesji nie są używane, a zatem nie mogą zakłócać naszej operacji zastępowania.
Azure SQL Edge
Azure SQL Edge opiera się na ograniczonej implementacji aparatu bazy danych SQL Server i dlatego obsługuje większość funkcji T-SQL, których możemy używać z SQL Server. Jednak w momencie pisania tego tekstu, SQL Edge nie obsługuje T-SQL FORMAT()
funkcja.
Zobacz Jak dodać wiodące i końcowe zera w Azure SQL Edge, aby zapoznać się z alternatywną metodą (która działa również w SQL Server).