Някои СУБД имат LPAD()
и RPAD()
функция, която може да се използва за добавяне на числа с начални и крайни нули.
SQL Server няма такава функция. Но това не ни пречи да можем да допълваме числата с водещи/завършващи нули.
Нецели числа
Първо, нека разгледаме нецели числа:
SELECT
FORMAT(7, '000.00') AS "1",
FORMAT(17, '000.00') AS "2",
FORMAT(73.5, '000.00') AS "3";
Резултат:
<пред>+--------+-------+-------+| 1 | 2 | 3 ||-------+-------+-------|| 007.00 | 017.00 | 073,50 |+--------+-------+-------+
Тук използваме FORMAT()
функция за форматиране на числото. Първият аргумент е числото, а вторият аргумент е низът за форматиране. Функцията извежда резултата си като форматиран низ.
В горния пример низът за формат се състои от персонализирани спецификатори на цифров формат, което води до оригиналното число с добавени нули на местата, където няма цифра в оригиналното число. Можем да използваме толкова нули във форматния низ, колкото са ни необходими.
SELECT
FORMAT(7, '00000.0000') AS "1",
FORMAT(17, '00000.0000') AS "2",
FORMAT(73.5, '00000.0000') AS "3";
Резултат:
+------------+------------+-----------+| 1 | 2 | 3 ||------------+------------+------------|| 00007.0000 | 00017.0000 | 00073.5000 |+-----------+-----------+------------+
Цели числа
Ако първоначалното число е цяло число, тогава трябва да свършим малко повече работа:
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";
Резултат:
+-----------+-----------+-----------+| 1 | 2 | 3 ||-----------+-----------+-----------|| 000070000 | 000170000 | 000735000 |+-----------+----------+-----------+
Тук използвах REPLACE()
функция за премахване на десетичната запетая, след като числото е форматирано с нея.
Изрично използвах en-US
като (по избор) трети аргумент, за да се гарантира, че десетичният разделител е точка/точка, а не друг знак, като запетая. Някои локали използват запетая като десетичен разделител. Ако не посочим изрично локала от функцията, тогава се използва локалът на текущата сесия. Изричното указване на локала от функцията гарантира, че локалът на текущата сесия не се използва и следователно не е в състояние да попречи на нашата операция за замяна.
Azure SQL Edge
Azure SQL Edge е изграден върху ограничена реализация на SQL Server Database Engine и следователно поддържа повечето от функциите на T-SQL, които можем да използваме със SQL Server. Въпреки това, към момента на писане, SQL Edge не поддържа T-SQL FORMAT()
функция.
Вижте Как да добавите водещи и крайни нули в Azure SQL Edge за алтернативен метод (който работи и в SQL Server).