Ако използвате Oracle Database или MySQL, имате достатъчно късмет да имате LPAD()
и RPAD()
функции, които ви позволяват да допълвате низ с даден знак (или знаци) отляво и/или отдясно.
Въпреки това, SQL Server (или по-точно T-SQL) не включва тези функции. Така че, ако имате нужда от лява подплата, ще трябва да импровизирате.
Тази статия представя четири опции за допълване на число с водещи нули в SQL Server. Така че можете да правите неща като завой 7
в 007
. Три от тези опции работят върху низове, така че можете също да приложите допълване към текстови данни.
Метод 1 – Използвайте функцията FORMAT()
Ако трябва да приложите водещи нули към число, тогава тази опция трябва да е всичко, от което се нуждаете. Тази опция използва FORMAT()
функция. Тази функция връща числото като низ в посочения от нас формат:
SELECT FORMAT(7, '000');
Резултат:
007
В този случай използваме 0
спецификатор на формат за форматиране на числото с водещи нули, където е приложимо. Това е само един от многото спецификатори на персонализиран формат. Персонализираните спецификатори на формат ни позволяват да бъдем много точни за това как е форматиран номерът ни.
Имайте предвид, че FORMAT()
функцията е само за числа и стойности за дата и час. Така че, ако трябва да приложите допълване към действителен низ, прочетете нататък.
Метод 2 – Използвайте функцията RIGHT()
Вторият метод използва RIGHT()
функция за връщане само на най-дясната част от низа, след добавяне на някои водещи нули.
Въпреки че прилагам водещи нули към „число“ тук, това всъщност е низово представяне на число. Така че, ако трябва да приложите допълване към низ вместо число, тогава този метод трябва да работи.
SELECT RIGHT('000' + '1234', 7);
Резултат:
0001234
7
указва колко знака трябва да бъде крайният резултат (след добавяне на нулите).
Намаляване на дължината
Така че, ако намалим това число, това ще намали броя на водещите нули:
SELECT RIGHT('000' + '1234', 6);
Резултат:
001234
Увеличаване на дължината
Но ако увеличим числото, трябва да се уверим, че сме посочили достатъчно нули, за да получим необходимата дължина:
SELECT RIGHT('000000' + '1234', 10);
Резултат:
0000001234
В противен случай ще стигнем до това:
SELECT RIGHT('000' + '1234', 10);
Резултат:
0001234
Прекъсване на номера
Също така имайте предвид, че ако не посочите достатъчно знаци за получената дължина на низа, числото ще бъде отрязано и ще получите само най-дясната част от числото:
SELECT RIGHT('000' + '1234', 2);
Резултат:
34
Така че в този случай първоначалното число беше съкратено плюс водещите нули бяха игнорирани.
Това е един сценарий, при който резултатът се различава от този на MySQL и LPAD()
на Oracle функция. Тази функция би произвела първите 2 (неподплатени) цифри вместо последните 2 цифри. Като това:
SELECT LPAD(1234, 2, 0);
Резултат:
12
Ако имате нужда от решение на SQL Server, което ще се държи като LPAD()
в такива случаи опитайте това:
SELECT RIGHT(REPLICATE('0', 3) + LEFT('1234', 2), 2);
Резултат:
12
Въпреки това, имайте предвид, че получавате същия резултат, просто като използвате LEFT()
функция самостоятелно:
SELECT LEFT('1234', 2);
Резултат:
12
Освен това се мъча да измисля причина, поради която някой иска да съкрати номера (като се има предвид, че се опитва да го напълни), но поне това е нещо, което трябва да се вземе предвид.
Метод 3 – Използвайте комбинация от RIGHT() и REPLICATE()
Този метод е почти същият като предишния, с единствената разлика, че просто замествам трите нули с REPLICATE()
функция:
SELECT RIGHT(REPLICATE('0', 3) + '1234', 7);
Резултат:
0001234
REPLICATE()
функцията ви спестява от необходимостта да въвеждате всяка нула (или друг знак) няколко пъти.
Бонус метод:Метод 4 – Използвайте комбинация от REPLACE() и STR()
Този метод идва от напълно различен ъгъл от предишните методи:
SELECT REPLACE(STR('1234', 6),' ','0');
Резултат:
001234
Тук използваме REPLACE()
функция във връзка с STR()
функция за преобразуване на число в низ с определена дължина, след което преобразуване на всеки интервал в нула.
Едно нещо, за което трябва да внимавате е, че ако съкратите числото (както направихме в предишен пример), ще получите куп звездички вместо (съкратеното) число:
SELECT REPLACE(STR('1234', 2),' ','0');
Резултат:
**